Activity启动流程

作者: flynnny | 来源:发表于2021-02-21 00:24 被阅读0次

    Android面试季必问——AMS的核心原理 系列
    Android启动流程 https://www.jianshu.com/p/f66f639c59d3
    AMS启动和应用 https://www.jianshu.com/p/8f0d372b0a34
    Activity启动流程 https://www.jianshu.com/p/53d63374619d

    基础知识

    13.png

    ActivityStackSupervisor:AMS创建,整个AMS只有一个对象,用来管理ActivityStack

    17.png

    HomeStack:桌面程序
    FocusedStack:启动app启动起来了的焦点
    ActivityRecord:activity的信息记录在ActivityRecord对象,并通过成员变量task指向TaskRecord

    14.png

    TaskRecord:记录栈里有哪些activity

    15.png

    ActivityStack

    16.png

    Instrumentation

    startActivity

    通信简图

    18.png

    先看有几个进程 ,然后思考是怎么跨进程通信的

    launcher进程
    跟AMS沟通, AMS属于system_server进程
    zygote fork出一个进程
    app进程

    1、launcher跟AMS通信:服务都是放在ServiceManager里的(AMS也属于一个Binder服务,会被加到ServiceManager里的).需要时向他要会返回一个amsproxy代理对象。就能调用AMS里的startActivity方法。AMS验证权限,做一些准备后启动activity
    2如果进程不存在请求zygote fork出进程。这里使用的不是Binder,是socket。
    *为什么不用bind:Binder里有很多线程在跑。fork会把进程里面当前线程复制过去,当线程里某个资源被其他资源锁住时,当fork后线程信息丢失了(fork原理),最后没有开锁的钥匙了导致死锁。socket会把其他线程停掉,fork后是干净的
    3新的应用进程和AMS通信:app很容易获取到AMS

    19.png

    启动细节(三个阶段)

    20.png 21.png 22.png

    相关文章

      网友评论

        本文标题:Activity启动流程

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