• Activity的启动流程


    前言:新启动一个activity分为两种情况,第一种是在Launcher的桌面点击icon图标启动一个新的应用,第二种是在应用启动的情况下从OneActivity->TwoActivity

    其实两种情况殊途同归,最后都是调用的相同方法。下面我们主要总结一下第一种情况。

    引用 https://blog.csdn.net/qian520ao/article/details/78156214 中的整体流程如下:

    1. Launcher通知AMS启动淘宝APP的MainActivity,也就是清单文件设置启动的Activity。
    2. AMS记录要启动的Activity信息,并且通知Launcher进入pause状态。
    3. Launcher进入pause状态后,通知AMS已经paused了,可以启动淘宝了。
    4. 淘宝app未开启过,所以AMS启动新的进程,并且在新进程中创建ActivityThread对象,执行其中的main函数方法。
    5. 淘宝app主线程启动完毕后通知AMS,并传入applicationThread以便通讯。
    6. AMS通知淘宝绑定Application并启动MainActivity。
    7. 淘宝启动MainActivitiy,并且创建和关联Context,最后调用onCreate方法。

      

        AMS是独立于Launcher和app进程的,因此他们之间的沟通是通过Binder来实现的,我们通过context.getSystemServer()可以获取到AMS的服务代理,但是只能从app发送消息到AMS,如果AMS想要通知app,就要使用applicationThread这个binder对象了,applicationThread的绑定是在ActivityThread的main方法中进行的。

      Launcher通过amp来通知AMS启动一个新的activity,这个新的activity对象就保存在AMS中这端,如果新的app还没有启动进程,ams就会调用zygote copy一个进程出来,并且在这个进程中调用ActivityThread.main()方法来启动一个主线程,在main中,会绑定一个applicationThread的binder对象,之后AMS会通过applicationThread来通知activityThread来启动activity,在ActivityThread中又会调用H来发送消息,最后会回调到instrumentation(仪表盘)中来进行activity的创建,onCreate等生命周期等。

     

  • 相关阅读:
    vim 多窗口编辑
    opengl笔记——旋转,一段代码的理解
    用条件变量实现事件等待器的正确与错误做法
    opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()
    Mule与其它web应用服务器的区别
    海量数据相似度计算之simhash短文本查找
    关于协方差矩阵的理解
    C++ STL中的常用容器浅谈
    唐-诗:《枫桥夜泊》
    唐-诗:《肚桑干》
  • 原文地址:https://www.cnblogs.com/sharkchao/p/10272136.html
Copyright © 2020-2023  润新知