本文主要是介绍[关联唤醒拦截]AMS的启动流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0. 流程图
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的启动流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!