android系统从systemserver开始的launcher启动详细流程(7)

2019-08-01 23:40

android系统启动流程

这意味着mAppThread变量可以直接转换为IApplicationThread。

6.1.3进行attach回调

ActivityThread.attach

注意,这里正是把mAppThread转换为IApplicationThread,再调用了mgr.attachApplication(mAppThread);。

1) ActivityManagerNative. getDefault

源代码路径\\frameworks\\base\\core\\java\\android\\app\\ActivityManagerNative.java

注意,这里有2个知识点:

a) binder通讯最终调用到ActivityManagerService.attachApplication

gDefault中return的am是ActivityManagerProxy类,传入的参数b是一个binder客户端(从ServiceManager.getService(\可以知道他是

ActivityManagerService的ibinder),该参数被赋值给mRemote变量。

31 / 41

android系统启动流程

这时ActivityThread.attach实际进入ActivityManagerProxy. attachApplication

transact通讯会使得服务端ActivityManagerService执行onTransact。

而ActivityManagerService自己继承自ActivityManagerNative,也没有重载onTransact,所以这里会执行ActivityManagerNative.onTransact,进入到

调用ActivityManagerService自己的attachApplication方法。

32 / 41

android系统启动流程

b 模板类

gDefault方法返回是一个模板类Singleton:

可以看到,这个模板类的作用就是将他的模板T统统搞成单例类,以保证

ActivityManagerNative. getDefault即使被反复调用,都始终只有一个binder客户端。

2)回到ActivityManagerService. attachApplication

继续看attachApplicationLocked

33 / 41

android系统启动流程

这里有两件事要关注: 第一:

makeActive这个方法将当前thread记录到了ProcessRecord下,这就是我们之前说的ProcessRecord.thread的来源。

第二:

程序最终进入了mStackSupervisor.attachApplicationLocked,可见如果完全由调用

lucnher的流程自己来拉起他的进程的话,最后转了一圈还是回到了mStackSupervisor。 mStackSupervisor.attachApplicationLocked到底做了什么?

6.1.4 ActivityStackSupervisor.attachApplicationLocked

一目了然,这个时候会走到调用realStartActivityLocked,而这个函数在前面4.1.4分析过了,会调用ActivityThread.ApplicationThread.scheduleResumeActivity触发显示。

6.1.5 ActivityStackSupervisor. ensureActivitiesVisibleLocked

mStackSupervisor.attachApplicationLocked的else的分支,会走到ensureActivitiesVisibleLocked也需要关注:

ensureActivitiesVisibleLocked会检查当栈顶的homestack对应的activity进程没有启动的话,他也会触发调用mStackSupervisor.startSpecificActivityLocked(r, false, false);

34 / 41

android系统启动流程

这意味着:其他任何进程走到这个attach的时候,只要luancher这个activity进入栈顶了,就可能执行这个动作拉起luancher的进程。

6.2 ApplicationThread内部类

上面attach流程中回传出来的thread实际是ActivityThread. ApplicationThread转换成IApplicationThread而来的;还记得之前我们分析luancher流程时,真正luancher的resume显示是靠app.thread.scheduleLaunchActivity和

app.thread.scheduleResumeActivity。现在就来看看这两个方法到底怎么在显示; 很显然这两个方法就在ApplicationThread这个内部类里面。

进入到ApplicationThread,看到的不仅仅是这两个方法,activity生命周期相关的动作处理都在这里了: schedulePauseActivity scheduleStopActivity scheduleResumeActivity scheduleLaunchActivity scheduleRelaunchActivity scheduleDestroyActivity。 这里只看我们关注的2个方法.

6.2.1 ActivityThread.ApplicationThread. scheduleLaunchActivity

1) ApplicationThread .scheduleLaunchActivity

2) H.handleMessage :

H是ApplicationThread的一个内部类,本质是一个handler:

H.handleMessage:

35 / 41


android系统从systemserver开始的launcher启动详细流程(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:建设项目安全预评价报告 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: