zoukankan      html  css  js  c++  java
  • 从桌面和应用内 Activity的启动流程

    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进程的过程。后面的流程是相似的。
    

     

  • 相关阅读:
    Hive扩展功能(四)--HiveServer2服务
    Hive扩展功能(三)--使用UDF函数将Hive中的数据插入MySQL中
    Hive扩展功能(二)--HWI接口
    Hive扩展功能(一)--Parquet
    Flutter全局变量设置 (ScopedModel)
    PHP时间常用方法
    用iFrame Resizer解决iframe高度自适应问题
    aos.js超赞页面滚动元素动画jQuery动画库
    Jcrop最新手册
    jQuery Jcrop API参数说明(中文版)
  • 原文地址:https://www.cnblogs.com/lianzhen/p/13054375.html
Copyright © 2011-2022 走看看