1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| public static final class Lifecycle extends SystemService{ private final ActivityManagerService mService; // ServiceManager反射调用构造方法构造 public Lifecycle(Context context) { super(context); mService = new ActivityManagerService(context); } @Override public void onStart() { mService.start(); // AMS 启动 } }
public ActivityManagerService(Context systemContext) { mContext = systemContext; // 赋值 SystemServer的context mFactoryTest = FactoryTest.getMode(); // 赋值 SystemServer 的ActivityThread mSystemThread = ActivityThread.currentActivityThread(); // 创建带Handler的前台线程和MainHandler,AMS内部通信用 mHandlerThread = new ServiceThread(TAG, android.os.Process.THREAD_PRIORITY_FOREGROUND, false); mHandlerThread.start(); mHandler = new MainHandler(mHandlerThread.getLooper()); // 创建UIHandler,AMS所需要的界面交互用 mUiHandler = new UiHandler(); // 创建前台广播接受队列 和 后台广播接受队列 mFgBroadcastQueue = new BroadcastQueue(this, mHandler, "foreground", BROADCAST_FG_TIMEOUT, false); mBgBroadcastQueue = new BroadcastQueue(this, mHandler, "background", BROADCAST_BG_TIMEOUT, true); mBroadcastQueues[0] = mFgBroadcastQueue; mBroadcastQueues[1] = mBgBroadcastQueue; // 创建Service 和Provider 容器 mServices = new ActiveServices(this); mProviderMap = new ProviderMap(this); // 创建 /data/system 目录 File dataDir = Environment.getDataDirectory(); File systemDir = new File(dataDir, "system"); systemDir.mkdirs(); // 创建 电量统计服务 mBatteryStatsService = new BatteryStatsService(systemDir, mHandler); mBatteryStatsService.getActiveStatistics().readLocked(); mBatteryStatsService.scheduleWriteToDisk(); mOnBattery = DEBUG_POWER ? true : mBatteryStatsService.getActiveStatistics().getIsOnBattery(); mBatteryStatsService.getActiveStatistics().setCallback(this); // 创建 进程统计服务 mProcessStats = new ProcessStatsService(this, new File(systemDir, "procstats")); mAppOpsService = new AppOpsService(new File(systemDir, "appops.xml"), mHandler); mGrantFile = new AtomicFile(new File(systemDir, "urigrants.xml")); // User 0 is the first and only user that runs at boot. mStartedUsers.put(UserHandle.USER_OWNER, new UserState(UserHandle.OWNER, true)); mUserLru.add(UserHandle.USER_OWNER); updateStartedUserArrayLocked(); ... // CPU 追踪器初始化 mProcessCpuTracker.init(); // 创建Activity相关对象 mRecentTasks = new RecentTasks(this); mStackSupervisor = new ActivityStackSupervisor(this, mRecentTasks); mTaskPersister = new TaskPersister(systemDir, mStackSupervisor, mRecentTasks); // 创建‘CpuTracker’的现场 mProcessCpuThread = new Thread("CpuTracker") { @Override public void run() { while (true) { synchronized(this) { ... // 更新cpu状态 updateCpuStatsNow(); } } } }; ... }
private void start() { // 启动 CPU 监控线程,在启动 CPU 监控线程之前,首先将进程复位 // 注册电池状态服务和权限管理服务 Process.removeAllProcessGroups(); //移除所有的进程组 mProcessCpuThread.start(); //启动CpuTracker线程 //启动电池统计服务 mBatteryStatsService.publish(mContext); mAppOpsService.publish(mContext); //创建LocalService,并添加到LocalServices LocalServices.addService(ActivityManagerInternal.class, new LocalService()); }
|