1、finalclassActivityManagerServiceextendsActivityManagerNative2. implementsWatchdog.Monitor,BatteryStatsImpl.BatteryCallback3. .4. 5. publicstaticContextmain(intfactoryTest)6. AThreadthr=newAThread();7. thr.start();8. 9. synchronized(thr)10. while(thr.mService=null)11. try12. thr.wait();13. catch(Inte
2、rruptedExceptione)14. 15. 16. 17. 18. mthr.mService;19. mSelfm;20. ActivityThreadatActivityThread.systemMain();21. mSystemThreadat;22. contextat.getSystemContext();23. m.mContextcontext;24. m.mFactoryTestfactoryTest;25. m.mMainStackActivityStack(m,context,true);26. 27. m.mBatteryStatsService.publish
3、(context);28. m.mUsageStatsService.publish(context);29. 30. 31. thr.mReadytrue;32. thr.notifyAll();33. 34. 35. m.startRunning(null,null,null);36. 37. return38. 39. 40. 41. 这个函数首先通过AThread线程对象来内部创建了一个ActivityManagerService实例,然后将这个实例保存其成员变量mService中,接着又把这个ActivityManagerService实例保存在ActivityManagerServ
4、ice类的静态成员变量mSelf中,最后初始化其它成员变量,就结束了。Step 8.PackageManagerService.main这个函数定义在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中,具体可以参考前面一篇文章Android应用程序安装过程源代码分析的Step 7。执行完这一步之后,系统中的应用程序的所有信息都保存在PackageManagerService中了,后面Home应用程序Launcher启动起来后,就会把PackageManagerService中的应用程序信息
5、取出来,然后以快捷图标的形式展示在桌面上,后面我们将会看到这个过程。Step 9.ActivityManagerService.setSystemProcessvoidsetSystemProcess()mSelf;ServiceManager.addService(activity,m);meminfoMemBinder(m);if(MONITOR_CPU_USAGE)cpuinfoCpuBinder(m);permissionPermissionController(m);ApplicationInfoinfomSelf.mContext.getPackageManager().getAp
6、plicationInfo(androidSTOCK_PM_FLAGS);mSystemThread.installSystemApplicationInfo(info);(mSelf)ProcessRecordappmSelf.newProcessRecordLocked(mSystemThread.getApplicationThread(),info,info.processName);app.persistentapp.pidMY_PID;app.maxAdjSYSTEM_ADJ;mSelf.mProcessNames.put(app.processName,app.info.uid,
7、app);(mSelf.mPidsSelfLocked)mSelf.mPidsSelfLocked.put(app.pid,mSelf.updateLruProcessLocked(app,true,(PackageManager.NameNotFoundExceptionthrowRuntimeException(Unabletofindandroidsystempackagee);40. 这个函数首先是将这个ActivityManagerService实例添加到ServiceManager中去托管,这样其它地方就可以通过ServiceManager.getService接口来访问这个全局唯
8、一的ActivityManagerService实例了,接着又通过调用mSystemThread.installSystemApplicationInfo函数来把应用程序框架层下面的android包加载进来 ,这里的mSystemThread是一个ActivityThread类型的实例变量,它是在上面的Step 7中创建的,后面就是一些其它的初始化工作了。Step 10. ActivityManagerService.systemReady这个函数是在上面的Step 6中的ServerThread.run函数在将系统中的一系列服务都初始化完毕之后才调用的,它定义在frameworks/base
9、/services/java/com/android/server/am/ActivityManagerServcie.java文件中:systemReady(finalRunnablegoingCallback)(this)mMainStack.resumeTopActivityLocked(null);16. 这个函数的内容比较多,这里省去无关的部分,主要关心启动Home应用程序的逻辑,这里就是通过mMainStack.resumeTopActivityLocked函数来启动Home应用程序的了,这里的mMainStack是一个ActivityStack类型的实例变量。Step 11. A
10、ctivityStack.resumeTopActivityLocked这个函数定义在frameworks/base/services/java/com/android/server/am/ActivityStack.java文件中:ActivityStackbooleanresumeTopActivityLocked(ActivityRecordprev)/Findthefirstactivitythatisnotfinishing.ActivityRecordnexttopRunningActivityLocked(null);(nextTherearenomoreactivities!L
11、etsjuststartupLauncher.(mMainStack)mService.startHomeActivityLocked();22. 这里调用函数topRunningActivityLocked返回的是当前系统Activity堆栈最顶端的Activity,由于此时还没有Activity被启动过,因此,返回值为null,即next变量的值为null,于是就调用mService.startHomeActivityLocked语句,这里的mService就是前面在Step 7中创建的ActivityManagerService实例了。Step 12.ActivityManagerSer
12、vice.startHomeActivityLockedstartHomeActivityLocked()IntentintentIntent(mTopAction,mTopData!null?Uri.parse(mTopData):intent.setComponent(mTopComponent);(mFactoryTestSystemServer.FACTORY_TEST_LOW_LEVEL)intent.addCategory(Intent.CATEGORY_HOME);ActivityInfoaInfointent.resolveActivityInfo(mContext.getPa
13、ckageManager(),(aInfointent.setComponent(newComponentName(aInfo.applicationInfo.packageName,aInfo.name);Dontdothishomecurrentlybeinginstrumented.getProcessRecordLocked(aInfo.processName,aInfo.applicationInfo.uid);(app|app.instrumentationClassintent.setFlags(intent.getFlags()|Intent.FLAG_ACTIVITY_NEW
14、_TASK);mMainStack.startActivityLocked(null,intent,0,aInfo,false,false);36. 函数首先创建一个CATEGORY_HOME类型的Intent,然后通过Intent.resolveActivityInfo函数向PackageManagerService查询Category类型为HOME的Activity,这里我们假设只有系统自带的Launcher应用程序注册了HOME类型的Activity(见packages/apps/Launcher2/AndroidManifest.xml文件):1. manifestxmlns:android=package=com.android.launcherandroid:sharedUserId=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1