ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:202.32KB ,
资源ID:16710695      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16710695.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android系统默认Home应用程序Launcher的启动过程源代码分析Word下载.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android系统默认Home应用程序Launcher的启动过程源代码分析Word下载.docx

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