美文网首页
APP的启动过程

APP的启动过程

作者: 学不好语文的LJ码农 | 来源:发表于2016-12-11 13:56 被阅读107次

以下内容整理自互联网,仅用于个人学习


1. APP的启动

APP启动过程.png

上图就可以很好的说明App启动的过程

ActivityManagerService组织回退栈时以ActivityRecord为基本单位,所有的ActivityRecord放在同一个ArrayList里,可以将mHistory看作一个栈对象,索引0所指的对象位于栈底,索引mHistory.size()-1所指的对象位于栈顶。

Zygote进程孵化出新的应用进程后,会执行ActivityThread类的main方法.在该方法里会先准备好Looper和消息队列,然后调用attach方法将应用进程绑定到ActivityManagerService,然后进入loop循环,不断地读取消息队列里的消息,并分发消息。

ActivityThread的main方法执行后,应用进程接下来通知ActivityManagerService应用进程已启动,ActivityManagerService保存应用进程的一个代理对象,这样ActivityManagerService可以通过这个代理对象控制应用进程,然后ActivityManagerService通知应用进程创建入口Activity的实例,并执行它的生命周期方法。

2. Activity的启动

调用Activity的startActivity实际是内部是调用了startActivityForResult。而在startActivityForResult内部是调用了Instrumentation的execStartActivity。execStartActivity内部调用AmS的startActivity(Binder机制)。AmS执行startActivity期间先做一些与栈相关的工作(获取要启动Activity相关信息ActivityRecord,栈的创建、检查权限等等)。

AmS的startActivity的调用过程

  • ActivityStackSupervisor.startActivityMayWait(直接调用,没有其他代码):从Intent里解析需要启动的Activity的相关信息。如:包名、类名。相关信息存在ResolveInfo类中,通过该类里面得到ActivityInfo对象。
  • ActivityStackSupervisor.startActivityLocked:通过传入的caller形参(IApplicationThread类型,从Activity的startActivity函数就开始一个个函数调用传入)得到调用者进程相关信息,保存到callerApp(ProcessRecord类型)变量中,然后创建要启动的Activity相关信息。保存到r(ActivityRecord)变量中。
  • ActivityStackSupervisor.startActivityUncheckedLocked:获取Activity的启动模式、判断要启动的Activity是否在栈顶、得到Activity加载的栈。
  • ActivityStack.resumeTopActivitiesLocked:确保被调用的Activity所在的栈处于顶端。
  • ActivityStack.resumeTopActivityInnerLocked:判断要启动的Activity所在的栈是否对当前用户不可见,如果不可见就不需要继续执行下去,因为即使把这个Activity启动起来,用户也看不见,还不如先把它保存起来,等到下次可见的时候再启动。若可见,则继续执行。把要启动的Activity添加到栈顶。
  • ActivityStackSupervisor.startSpecificActivityLocked:主要跟要启动的Activity进程相关。如判断所再进程是否已经运行、判断是否另开进程。如果没有指定新进程,即直接用默认进程,则直接调用realStartActivityLocked。
  • ActivityStackSupervisor.realStartActivityLocked:通过Binder驱动进入到ApplicationThread的scheduleLaunchActivity函数。

做完这些工作,AmS通过Binder调ApplicationThread(是个Binder对象)的scheduleLaunchActivity。 ApplicationThread通过消息机制控制Activity生命周期。

相关文章

  • android开发艺术探索第九章心得(四大组件的工作过程)

    app的启动过程 app的启动过程其实是在AMS和ActivityThread(ApplicationThread...

  • iOS 启动过程分析及优化

    APP启动过程分析 本文主要通过我们对于APP启动过程的分析,然后去剖析如何去进行启动时间的优化,以达到APP性能...

  • 启动时间优化

    1、APP启动 1.1、APP启动为什么这么重要 App 启动是和用户的第一个交互过程,所以要尽量缩短这个过程的时...

  • 深入理解iOS App的启动过程

    前言 参考资料:深入理解iOS App的启动过程iOS 应用程序启动过程及原理总结iOS:App启动过程详解(不同...

  • APP启动过程简单分析

    APP启动过程 上图就可以很好的说明App启动的过程 ActivityManagerService组织回退栈时以A...

  • App启动流程:总体说明

    概述: “应用程序启动过程”其实说的就是“冷启动”过程。 App启动流程总体是由以下3部分组成 为目标App启动做...

  • app冷启动优化方案

    App启动过程 app启动分为冷启动和热启动,热启动是App刚结束后再启动,有部分在内存但没有进程存在。我们所做的...

  • iOS底层探索30、启动优化分析

    引言 APP 启动,对用户而言,是从点击 APP 开始,到看到 APP 首页展现的过程。 冷启动:针对APP,内存...

  • App启动时间监测以及优化

    App启动类型 热启动,App启动后退到后台,App目前还是在系统的进程中,此时App重新进入前台这个过程就是热启...

  • App启动优化

    要想优化App的启动过程,需要先了解App的启动流程。 App启动调用顺序:1:加载info.plist里设置的启...

网友评论

      本文标题:APP的启动过程

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