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

2019-08-01 23:40

android系统启动流程

继续进入重载的ActivityManagerService. startProcessLocked(只有3个参数)

26 / 41

android系统启动流程

这里有3个信息值得关注: 1) Process.start:

进程启动,Process是进程管理类,一直跟踪下去,会发现他最后和zygote进程启动的服务端socket进行了通讯,通知zygote分化出一个子进程来。 2) android.app.ActivityThread

Process.start的时候,传入的class名称是android.app.ActivityThread,这里就是之前说的activity的进程一定对应着一个后台activitythread进程的,activity的所有生命周期动作都是activitythread处理的,所以前面真正让activity显示的是app.thread的schedule名称的相关函数,后面再分析 3)后面的打印信息

这里专门截取这个打印信息,是为了让大家看到这种打印数据组织方式,同时知道进程创建后,android系统一定有这么一个打印,我们在看log的时候就可以关注这个信息。 搜索log的时候也注意,直接搜索整句log,在代码中是搜索不到的,因为很多地方都像上面被截断了,需要搜索单个字符串。

5 Process类管理创建activity进程

源代码路径:

\\frameworks\\base\\core\\java\\android\\os\\ Process.java

5.1 Process.start:

重点关注前4个参数,具体到我们追踪的luancher: 第一个参数: processclass,android.app.ActivityThread 第二个参数:nicename对应着进程名称launcher. 第三个参数:uid,用户id 第四个参数:gid:用户组id

27 / 41

android系统启动流程

5.2 Process.startViaZygote

5.3 zygoteSendArgsAndGetResult和 openZygoteSocketIfNeeded

28 / 41

android系统启动流程

1)openZygoteSocketIfNeeded方法: 服务端zygote这个socket的连接,

继续创建sZygoteSocket收发数据用的stream对象和buffer。 2)zygoteSendArgsAndGetResult:

完成了java层LocalSocket 的创建得到sZygoteSocket ,并继续完成和zygote进程的

利用sZygoteWriter发送创建进程需要的参数,包括进程名称nicename(即luancher),进程要启动的第一个class(android.app.ActivityThread),uid和gid等 3)底层响应

参考《android系统从init进程开始到systemserver启动详细流程.docx》的6.3.4和6.3.5 此时\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteInit.java下的 ZygoteInit .runSelectLoop()接收到socket连接请求,继续接收参数列表,开始fork子进程,并最终执行该进程的入口函数;继续进入到

\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteConnection.java的 ZygoteConnection .handleChildProc方法。

在《android系统从init进程开始到systemserver启动详细流程.docx》的6.3.5节已经分析过,ZygoteConnection .handleChildProc执行的入口函数,是app层创建进程是传递的第一个参数所代表的class的main函数,所以这里就是android.app.ActivityThread的main函数。

到此为止,luancher运行需要的子进程创建完毕,名称为launcher,第一个要执行的函数是

29 / 41

android系统启动流程

android.app.ActivityThread的main。

6 ActivityThread线程类分析

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

6.1 ActivityThread.main分析

ActivityThread这个线程是专门管理activity运行生命周期的各种动作的封装。

当然他实际还包含了对systemserver这个进程创建管理线程的工作,之前分析过其入口是systemmain,而普通的activity的入口是main;这二者本质是一样的,只是处理的权限等属性不同。

main做3个主要的任务,分析如下:

6.1.1创建了looper对象和本线程绑定。

原来我们在activity或service或dialog中可以随便使用handler是这个线程在后台付出的努力。

关于handler,looper,messagequeue之间的关系可以百度或参考《深入理解Android 卷1》,比较简单,这里不讨论。

6.1.2创建了ActivityThread对象实例

注意,当new ActivityThread()的时候,其成员变量

final ApplicationThread mAppThread = new ApplicationThread(); 同时被创建。

ApplicationThread是内部类,继承自ApplicationThreadNative

ApplicationThreadNative继承自接口IApplicationThread

30 / 41


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

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

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

马上注册会员

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