麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

ActivityManagerService

2019-11-09 14:22:58
字體:
來源:轉載
供稿:網友

引言: 由于上節我們知道SystemServer啟動了很多系統服務,當前也啟動了ActivityManagerService服務 所以我們這節內容就分析AMS的啟動過程以及在系統中承擔的角色.

@(晚輩目前還是在校大學生,所以可能又很多地方理解有偏差,所以希望前輩們不吝賜教)

ActivityManagerService的創建1startService2ActivityManagerServiceLifecycleclassAMSAMSonStartsetSystemPRocess

ActivityManagerService的創建

銜接上文: 在SystemServer的run方法中調用startBootstrapServices(),在其中:

// Activity manager runs the show. mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService();//[1][2] //給AMS設置SystemServiceManager mActivityManagerService.setSystemServiceManager(mSystemServiceManager); mActivityManagerService.setInstaller(installer); ... mActivityManagerService.setSystemProcess();

1startService()

@(SystemServiceManager.java->startService())

通過反射調用構造 調用service.onStart()方法 public <T extends SystemService> T startService(Class<T> serviceClass) { try { final String name = serviceClass.getName(); ... final T service; try { Constructor<T> constructor = serviceClass.getConstructor(Context.class); service = constructor.newInstance(mContext); } ... mServices.add(service); // Start it. try { service.onStart();//針對AMS,則調用AMS的onStart()方法 } ... return service; } finally { ... } }

2ActivityManagerService.Lifecycle.class

@(SystemService的派生類)

內部持有AMS的對象,所以到目前為止AMS就創建出來了

public static final class Lifecycle extends SystemService { private final ActivityManagerService mService; public Lifecycle(Context context) { super(context); mService = new ActivityManagerService(context); } @Override public void onStart() { mService.start(); } public ActivityManagerService getService() { return mService; } }

AMS

@(AMS的構造方法)

創建出一些管理4大組件的管理對象.

// public ActivityManagerService(Context systemContext) { mContext = systemContext; mFactoryTest = FactoryTest.getMode(); //獲取ActivityThread對象的引用 mSystemThread = ActivityThread.currentActivityThread(); //創建一個HandlerThread mHandlerThread = new ServiceThread(TAG, android.os.Process.THREAD_PRIORITY_FOREGROUND, false /*allowIo*/); mHandlerThread.start(); mHandler = new MainHandler(mHandlerThread.getLooper()); //創建UI線程 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; mServices = new ActiveServices(this);//創建管理Service的組件 mProviderMap = new ProviderMap(this);//創建管理provider的組件 mAppErrors = new AppErrors(mContext, 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); mAppOpsService.startWatchingMode(AppOpsManager.OP_RUN_IN_BACKGROUND, null, new IAppOpsCallback.Stub() { @Override public void opChanged(int op, int uid, String packageName) { if (op == AppOpsManager.OP_RUN_IN_BACKGROUND && packageName != null) { if (mAppOpsService.checkOperation(op, uid, packageName) != AppOpsManager.MODE_ALLOWED) { runInBackgroundDisabled(uid); } } } }); ... //有關cpu信息的初始化 mProcessCpuTracker.init(); mCompatModePackages = new CompatModePackages(this, systemDir, mHandler); mIntentFirewall = new IntentFirewall(new IntentFirewallInterface(), mHandler); //創建管理Activity的對象 mStackSupervisor = new ActivityStackSupervisor(this); mActivityStarter = new ActivityStarter(this, mStackSupervisor); mRecentTasks = new RecentTasks(this, mStackSupervisor); //創建一個線程名稱為CpuTracker,主要是做一些CPU有關的操作 mProcessCpuThread = new Thread("CpuTracker") { @Override public void run() { while (true) { try { try { synchronized(this) { final long now = SystemClock.uptimeMillis(); long nextCpuDelay = (mLastCpuTime.get()+MONITOR_CPU_MAX_TIME)-now; long nextWriteDelay = (mLastWriteTime+BATTERY_STATS_TIME)-now; if (nextWriteDelay < nextCpuDelay) { nextCpuDelay = nextWriteDelay; } if (nextCpuDelay > 0) { mProcessCpuMutexFree.set(true); this.wait(nextCpuDelay); } } } catch (InterruptedException e) { } updateCpuStatsNow(); } catch (Exception e) { Slog.e(TAG, "Unexpected exception collecting process stats", e); } } } }; ... }

AMS.onStart()

@(onStart())

private void start() { Process.removeAllProcessGroups();//Remove all process groups mProcessCpuThread.start();//Runtime CPU use collection thread //啟動cpu相關 mBatteryStatsService.publish(mContext); mAppOpsService.publish(mContext); LocalServices.addService(ActivityManagerInternal.class, new LocalService());}

setSystemProcess()

@(源于SystemService中startBootstrapServices()調用)

mActivityManagerService.setSystemProcess(); 主要是向ServiceManager注冊了一些服務,最后看出向AMS中把SystemServer自己添加到其中,所以AMS是管理這個系統進程的類.

public void setSystemProcess() { try { //將AMS添加到ServiceManager ServiceManager.addService(Context.ACTIVITY_SERVICE, this, true); //添加進程信息服務 ServiceManager.addService(ProcessStats.SERVICE_NAME, mProcessStats); //添加每個進程內存使用服務 ServiceManager.addService("meminfo", new MemBinder(this)); //添加每個進程圖形加速卡狀態服務 ServiceManager.addService("gfxinfo", new GraphicsBinder(this)); //db狀態服務 ServiceManager.addService("dbinfo", new DbBinder(this)); if (MONITOR_CPU_USAGE) { ServiceManager.addService("cpuinfo", new CpuBinder(this)); } ServiceManager.addService("permission", new PermissionController(this)); ServiceManager.addService("processinfo", new ProcessInfoService(this)); ... synchronized (this) { //把SystemServer進程本身添加到process管理中 ProcessRecord app = newProcessRecordLocked(info, info.processName, false, 0); app.persistent = true; app.pid = MY_PID; app.maxAdj = ProcessList.SYSTEM_ADJ; app.makeActive(mSystemThread.getapplicationThread(), mProcessStats); synchronized (mPidsSelfLocked) { mPidsSelfLocked.put(app.pid, app); } updateLruProcessLocked(app, false, null); updateOomAdjLocked(); } } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException( "Unable to find android system package", e); } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 小雪奶水翁胀公吸小说最新章节 | 91亚洲精品一区二区福利 | 久草在线观看福利视频 | 好吊色欧美一区二区三区四区 | 91精品免费在线 | 最新中文字幕日本 | 蜜桃91丨九色丨蝌蚪91桃色 | 中日无线码1区 | 久久激情国产 | 亚洲影院在线播放 | 伊人网站| 蜜桃av网 | 国产亚洲精品美女久久久 | 99国产精品自拍 | 久草在线资源观看 | 色诱亚洲精品久久久久久 | 一级毛片在线免费播放 | 欧美性生交xxxxx免费观看 | 中文字幕天堂在线 | 黑人一区| 久久精品视频黄色 | 久久精品片 | 一级黄色在线观看 | 成人羞羞网站入口 | 久久精品视频69 | 免费a观看 | 久久久久久久久久亚洲精品 | 色播久久 | 久久久国产电影 | 亚洲 91 | 亚洲一区二区三区四区精品 | 午夜精品毛片 | 中国hd高清xxxxvideo| 久久久久一区二区三区四区五区 | 国产精品一区二av18款 | 中文日产幕无线码6区免费版 | 国产精品一区二区三区在线 | 国产一区二区久久精品 | 欧美日韩精品一区二区三区蜜桃 | 久久久久久久久久91 | 午夜精品成人一区二区 |