[关联唤醒拦截]AMS的启动流程

2024-02-09 20:18

本文主要是介绍[关联唤醒拦截]AMS的启动流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0. 流程图

SystemServer->AMS->PowerController->BackgroundCleanHelper

1. SystemServer.java

  • frameworks/base/services/java/com/android/server/SystemServer.java
    很多framewrok层的服务都是从这里定义启动的

1.1 SystemServer.startBootstrapServices()

package com.android.server;public final class SystemServer {private static final String TAG = "SystemServer";/*** Starts the small tangle of critical services that are needed to get* the system off the ground.  These services have complex mutual dependencies* which is why we initialize them all in one place here.  Unless your service* is also entwined in these dependencies, it should be initialized in one of* the other functions.*/private void startBootstrapServices() {...// 启动 AMS// Activity manager runs the show.traceBeginAndSlog("StartActivityManager");mActivityManagerService = mSystemServiceManager.startService(ActivityManagerService.Lifecycle.class).getService();mActivityManagerService.setSystemServiceManager(mSystemServiceManager);mActivityManagerService.setInstaller(installer);traceEnd();

1.2 初始化关联唤醒服务

// inone add start by suhuazhi powersave
import com.android.server.power.PowerController;
//inone add end by suhuazhi powersave/*** Starts a miscellaneous grab bag of stuff that has yet to be refactored* and organized.*/private void startOtherServices() {...// inone add start by suhuazhi for powersavePowerController powerctl = null;// inone add end by suhuazhi for powersave...// inone add start by suhuazhi powersavetry {Slog.i(TAG, "PowerController Service");// 实例化关联唤醒服务powerctl = new PowerController(context, mActivityManagerService);} catch (Throwable e) {reportWtf("starting PowerController", e);}// inone add end by suhuazhi powersave...}

2. AMS启动-ActivityManagerService.Lifecycle

  • frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
    public static final class Lifecycle extends SystemService {private final ActivityManagerService mService;public Lifecycle(Context context) {super(context);// 启动入口mService = new ActivityManagerServiceEx(context);}@Overridepublic void onStart() {mService.start();}@Overridepublic void onCleanupUser(int userId) {mService.mBatteryStatsService.onCleanupUser(userId);}public ActivityManagerService getService() {return mService;}}

3. AMS相关初始化

package com.android.server.am;public class ActivityManagerService extends ActivityManagerServiceExAbsimplements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {public class ActivityManagerServiceEx extends ActivityManagerService {

3.1 ActivityManagerService.systemReady()

package com.android.server;public final class SystemServer {private static final String TAG = "SystemServer";// We now tell the activity manager it is okay to run third party// code.  It will call back into us once it has gotten to the state// where third party code can really run (but before it has actually// started launching the initial applications), for us to complete our// initialization.mActivityManagerService.systemReady(() -> {...// inone add start by suhuazhi for power policytry {powerctlF.setWindowManager(windowManagerF);Slog.i(TAG, "PowerController Service systemReady");powerctlF.systemReady();} catch (Throwable e) {reportWtf("starting PowerController", e);}// inone add end by suhuazhi for power policy...}

4. PowerController 初始化

4.1 构造器

package com.android.server.power;// SystemServer.startOtherServices()public PowerController(Context context, IActivityManager activityManager) {mContext = context;mActivityManager = activityManager;}

4.2 AMS.systemReady()

    // call before AMS.SystemReadby// 系统触摸事件监听public void setWindowManager(WindowManagerService wm) {mWindowManagerFuncs = wm;}// called when system is AMS.ready ( that is all the service is started)public void systemReady() {HandlerThread handlerThread = new HandlerThread(TAG);handlerThread.start();msgHandler = new MyHandler(handlerThread.getLooper());// to init Data firstmsgHandler.sendMessage(msgHandler.obtainMessage(MSG_INIT));}

4.3 AMS.initData()

    private void initData() {createPowerSaveHelpers();}// create helpersprivate void createPowerSaveHelpers() {mBackgroundCleanHelper = new BackgroundCleanHelper(mContext, mActivityManager, msgHandler);}

至此打通SystemServer->AMS->PowerController->BackgroundCleanHelper

这篇关于[关联唤醒拦截]AMS的启动流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695195

相关文章

捷瑞数字业绩波动性明显:关联交易不低,募资必要性遭质疑

《港湾商业观察》施子夫 5月22日,山东捷瑞数字科技股份有限公司(以下简称,捷瑞数字)及保荐机构国新证券披露第三轮问询的回复,继续推进北交所上市进程。 从2023年6月递表开始,监管层已下发三轮审核问询函,关注到捷瑞数字存在同业竞争、关联交易、募资合理性、期后业绩波动等焦点问题。公司的上市之路多少被阴影笼罩。​ 业绩波动遭问询 捷瑞数字成立于2000年,公司是一家以数字孪生驱动的工

工作流Activiti初体验—流程撤回【二】

已经玩工作流了,打算还是研究一下撤回的功能。但是流程图里面并不带撤回的组件,所以需要自己动态改造一下,还是延续上一个流程继续试验撤回功能。《工作流Activiti初体验【一】》 完整流程图 我们研究一下分发任务撤回到发起任务,其他环节的撤回类似 撤回的原理大概如下: 将分发任务后面的方向清空,把发起任务拼接到原来的判断网关,然后结束分发任务,这样流程就到发起任务了 此时的流程如上图,

ROS话题通信流程自定义数据格式

ROS话题通信流程自定义数据格式 需求流程实现步骤定义msg文件编辑配置文件编译 在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如:

Docker启动异常

报错信息: failed to start daemon: Error initializing network controller: error creating default "bridge" network: cannot create network b8fd8c684f0ba865d4a13d36e5282fd694bbd37b243c7ec6c9cd29416db98d4b (d

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)  标签: 编码邓白氏编码申请流程苹果开发者账号申请 2016-07-08 16:13  2274人阅读  评论(2)  收藏  举报   分类: 技术  苹果开发  邓白氏编码申请 版权声明:本文为博主原创文章,未经博主允许不得转载。     申请公司的苹果开发者账号和企业级的苹

办理河南建筑工程乙级设计资质的流程与要点

办理河南建筑工程乙级设计资质的流程与要点 办理河南建筑工程乙级设计资质的流程与要点主要包括以下几个方面: 流程: 工商注册与资质规划:确保企业具有独立法人资格,完成工商注册,并明确乙级设计资质的具体要求,包括注册资本、人员配置、技术条件等。 专业技术人员配置: 雇佣或签约符合资质要求的专业技术人员,包括但不限于:一级注册结构工程师2名、一级注册建筑师2名、注册暖通工程师1名、注册供配电工

小车启动底盘功能包

传感器与小车底盘的集成 新建功能包 catkin_create_pkg mycar_start roscpp rospy std_msgs ros_arduino_python usb_cam ydlidar_ros_driver 功能包下创建launch文件夹,launch文件夹中新建launch文件,文件名start.launch。 内容如下 <!-- 机器人启动文件:1.启动底盘2

【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结

操作系统管理物理内存以及与外设磁盘硬件进行数据的交换 操作系统如何管理物理内存呢? 其实操作系统内核先对内存先描述再组织的!操作系统管理内存的基本单位是4KB,操作系统会为每一个4KB大小的物理内存块创建一个描述该4KB内存块的struct page结构体,该结构体存储着这4KB内存块的属性信息,通过管理struct page来对内存进行管理,page结构体的大小比较小,OS通常将它们组成一个

黑龙江等保测评的具体流程是怎样的

黑龙江等保测评的具体流程 黑龙江等保测评是根据《中华人民共和国网络安全法》及相关法律法规,对信息系统安全保护能力进行评估和验证的过程。以下是黑龙江等保测评的具体流程: 系统定级:根据业务、资产、安全技术、安全管理等方面的情况,对企业的安全防护水平进行评估,编制定级报告,为客户提供技术支持,协助客户编制定级报告,并组织相关专家对定级报告进行评估。 系统备案:持定级报告及登记表到当地的公安网监

Eclipse使用git最基本流程

Eclipse使用git最基本流程,eclipsegit流程 git有诸多好处,网上都说的很清楚了,在这里我不再赘述。对于我来说,私下里想做一些项目,而又不能很好的保存自己的代码和进行版本控制,这时候,就用到了git。下面,就以我个人为例讲讲git从0开始如何安装使用。 Step1 准备工作 msysgit,下载地址为http://msysgit.github.io/