Android App启动流程

作者: 科技猿人 | 来源:发表于2021-02-01 00:24 被阅读0次

    Read The Fucking Source Code

    引言

    App的启动流程就是Activity的生命周期吗?
    也对,但是这种理解太浅显了

    大道至简(Android Q — API 29)

    顶层视角:具体到每一次IPC调用


    抽丝剥茧

    Step1:Launcher点击启动,向AMS请求
    Step2:AMS向Launcher进程发送Pause
    Step3:Launcher处理Pause后,反馈Pause给AMS
    Step4:AMS向Zygote进程发起新进程创建请求
    Step5:Zygote进程创建新进程,新进程启动
    Step6:新进程启动,向AMS发送应用启动准备请求
    Step7:AMS处理启动数据,反馈启动给新进程
    Step8:新进程收到启动信号,执行Create、Start、Resume后,反馈Resume给AMS
    Step9:AMS处理接收到的Resume
    Step10:新进程执行完Resume后,会将一个IdleHandler添加到消息队列,等待消息队列空闲时,发送ActivityIdle给AMS
    Step11:AMS处理接收到的ActivityIdle,发送Stop给Launcher进程
    Step12:Launcher进程收到Stop,处理Stop事务

    千丝万缕

     scheduleTransaction(ClientTransaction) 参考:【 Android ClientTransaction

    Activity启动流程

    问题思考

    在子线程中可以更新UI吗?

    • 这个要看更新时机,因为线程检查是在ViewRootImpl中的checkThread中进行的,在ViewRootImpl创建前就可以在子线程更新UI。
    • 那么ViewRootImpl是在什么时候创建的呢?是在Activity的onResume后创建的,所以在onResume前,在子线程更新UI是没有问题的。

    小编的扩展链接

    《Android 视图模块 全家桶》

    优秀博客参考

    代码讲解透彻/图示清晰—Gityuan全家桶
    最好的时序图—分析Android中应用的启动流程
    Android应用启动流程分析
    Android APP 启动流程简析
    总结activity启动过程中View,ViewRootImpl关系
    ActivityStackSupervisor,ActivityStack,ActivityRecord,TaskRecord的关系

    相关文章

      网友评论

        本文标题:Android App启动流程

        本文链接:https://www.haomeiwen.com/subject/yelszktx.html