一张图概括App启动流程

一、神图:

这里写图片描述

二、说明

笔者在下面博文内容的基础上,加上自己的理解,对图片稍加了一点点修改,启动流程文字部分也有所修改
参考:http://www.sohu.com/a/130814934_675634 (感谢楼主)

三、启动流程:

①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;(startActivity()中调用ActivityManagerProxy.startActivity(),最终通过Binder执行system_server进程中的AMS中的startActivity()函数)

②system_server进程接收到请求后,向zygote进程发送创建进程的请求;(这一步AMS中startActivity()里面会调用startProcessLocked()函数,最终之行Process.start()函数,其最终调用了Zygote并通过socket通信的方式让Zygote进程fork除了一个新的进程,并根据我们刚刚传递的”android.app.ActivityThread”字符串,反射出该对象并执行ActivityThread的main方法)。

③Zygote进程fork出新的子进程,即App进程;

④App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;(ActivityThread的main()函数里面会创建ActivityThread对象并调用attach()函数

ActivityThread thread = new ActivityThread(); 
thread.attach(false);
//attach()中调用ActivityManagerProxy的attachApplication(),也就是最终通过Binder机制调用了ActivityManagerService的attachApplication

⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;

⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler(ActivityThread.H)向主线程发送LAUNCH_ACTIVITY消息;

⑦主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。(performLaunchActivity() 通过classLoader(通过LoadedApk对象来获取)加载类,然后通过反射生成对象,最后回调Activity.onCreate()等方法)

⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值