美文网首页
Android Framework学习之Activity的启动流

Android Framework学习之Activity的启动流

作者: 一只二凡子 | 来源:发表于2020-11-12 00:03 被阅读0次

    1.Activity的生命周期回调

    2.冷启动大致流程,涉及哪些组件,这些组件的通信过程是怎样的?

    3.Activity启动过程中,生命周期回调的原理?

    startActivity属于启动应用组件,所以要和AMS通信,请求的数据会封装到一个data的Parcel里写到binder驱动,在AMS的onTransact回调里根据请求码和数据去在startSpecificActivityLocked函数里去处理。这里在之前的文章里也讲过。

    startActivity是AMS里的一个函数,里面处理的逻辑是在startSpecificActivityLocked中执行的

    realStartActivityLocked函数是真正启动Activity的函数

    entryPoint是应用进程启动之后的入口函数的Java类,Process.start函数会带着这个参数向Zygote发送请求启动应用进程,进程启动完后返回的pid就放在Process.ProcessStartResut这个数据结构里,下面代码发送的消息是说应用启动之后如果10秒之内没有向AMS报告,AMS就会清理应用相关的所有信息(准备启动的应用组件)

    openZygoteSocketIfNeeded(abi)是打开通往Zygote的Socket,通过Socket发送启动进程的参数然后读取返回的结果。

    attach函数就是应用向AMS发送报告,AMS的实现如下图:

    先根据pid去查到ProcessRecord的Map里去查,查出来之后则去执行应用端注册到AMS的binder对象的bindApplication函数,去初始化(比如创建Application等)

    mStackSupervisor.attachApplicationLocked(app)是处理关于Activity的启动的。

    AMS中有2个stack,一个是luncher相关的,一个是非luncher相关的也就是mFocusedStack。

    stack.topRunningActivityLocked(null)是从stack里找到最近的task,然后取出task栈顶的Activity,然后调用真正启动Activity的函数realStartActivityLocked

    应用收到请求之后封装了一个消息丢到主线程里,mH就是主线程的handle对象

    创建Activity对象并执行onCreate回调,performStart执行onStart回调,最终会调到onResume回调

    总结一下

    相关文章

      网友评论

          本文标题:Android Framework学习之Activity的启动流

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