首页 > 其他 > 详细

从桌面和应用内 Activity的启动流程

时间:2020-06-06 13:26:56      阅读:39      评论:0      收藏:0      [点我收藏+]
1.APP还没有被打开过从桌面启动
<1>首先桌面进程会像AMS服务发送startActivity的请求,AMS从system_service中去拿----一次IPC通信
<2>system_service收到请求后通过socket的请求让Zygote进程去fork我们的APP进程
<3>APP进程创建成功后会持有AMS的代理对象ActivityManageProxy,通过这个代理对象发送attach application请求到AMS-----一次IPC通信
<4>AMS再通过ApplicationThreadProxy这个代理对象去让ApplicationThread去启动Activity,
 ApplicationThread通过Handler消息让我们的ActivityThread调用handlerLaunchActivity启动Activity执行生命周期。----一次IPC通信 和一次Handler通信
 
2.应用内启动Activity
<1>实际会走ContentImp去StartActivity--->Instrumentation.execStartActivity方法-->ActivityManager.getService().startActivity 解释下这个ActivityManager.getService()其实就是AMS的代理类
<2>ActivityManagerService.startActivity--->ActivityStarter.startActivityUnchecked ---> 通过AplicationThread的代理类去让ApplicationThread执行这个请求,ApplicationThread又会通过Handler
   让ActivityThread去执行startActivity---》Instrumentation.newActivity 创建成功--执行Activity的生命周期。   
   
总结:其实都是通过AMS去启动Activity,而AMS通过IApplicationThread的AIDL接口来使ApplicationThread去真正的执行我们的创建过程。
不同的是从桌面启动的时候是利用进程间通信(Launcher--AMS)--(AMS--Zygote-APP进程)。有这个fork出APP进程的过程。后面的流程是相似的。

 技术分享图片

从桌面和应用内 Activity的启动流程

原文:https://www.cnblogs.com/lianzhen/p/13054375.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!