进程创建过程
2018-03-22 11:16:57 0 举报
进程创建过程
作者其他创作
大纲/内容
start
main
invokeStaticMain
忽略context到ActivityThread的流程ActivityThread#acquireProvider——invoke——ActivityThread#acquireExistingProvider——invoke——AMS#getContentProviderImplgetContentProviderImpl()中如果进程没有创建就会调用startProcessLocked()来启动ContentProvider所处的进程。从AMS调用Process.start开始分析
H(Handler)
handleChildProc
startViaZygote
applicationInit
SystemServer
attach(true)
Process
runOnce
attachApplication:1、ActivityThread将ApplicationThread依附到AMS上。2、在getContentProviderImpl会调用startProcessLocked方法来创建ProcessRecord,若没有这个操作“1”就会失败,因为“1”会检查mPidsSelfLocked(map)中是否有当前进程的processRecordhandleBindApplication:1、创建LoadedApk,ApplicationInfo,Instrumentation,ContextImpl,Application(先会创建classload同时加入dex的路径,最后加载apk的application),接着安装provider,再接着调用Application的onCreate(),这里注意时序。
zygoteInit
systemMain
openZygoteSocketIfNeeded:1、这里是通过ZygoteState的connect(实现类是LocalSocketImpl)方法来使用Socket与ZygoteInit来通信的runSelectLoop:1、方法循环接收消息,得到ZygoteConnection对象并且调用它的runOnce方法runOnce:1、调用了forkAndSpecialize方法,来真正的创建进程,接着调用新创建的进程(pid=0)的handleChildProc方法applicationInit:1、AMS一开始调用Process的start方法传入的entryPoint 就是 \"android.app.ActivityThread\",这里根据这个参数反射调用ActivityThread的main方法,开始整个进程构建
attach(false)
attachApplication
runSelectLoop
bindApplication
handleMessage
ActivityManagerService
ActivityThread
handleBindApplication
ZygoteConnection
ZygoteInit
openZygoteSocketIfNeeded
四大组件启动时都会去检查所属的进程是否创建,若未创建,则创建进程,以启动Provider为例,分析其创建过程
connect
systemMain:1、SystemServer通过setSystemProcess创建ProcessRecordattach(true):1、创建Instrumentation,ContextImplmain:1、初始化UI线程,创建ActivityThread 2、开启Looper循环attach(false):1、AMS绑定ApplicationThread
RuntimeInit
0 条评论
下一页