0
点赞
收藏
分享

微信扫一扫

Android Activity 启动过程(一)


在Android系统中,有两种操作会引发Activity的启动,

  • 用户点击应用程序图标时,​​Launcher​​​ 会为我们启动应用程序的主​​Activity​
  • 应用程序的默认​​Activity​​​ 启动起来后,它又可以在内部通过调用​​startActvity​​​ 接口启动新的​​Activity​

简介

无论是通过点击应用程序图标来启动 ​​Activity​​​,还是通过 ​​Activity​​​ 内部调用 ​​startActivity​​​ 接口来启动新的 ​​Activity​​​,都要借助于应用程序框架层的 ​​ActivityManagerService​​​ 服务进程。在 ​​Android​​​ 应用程序框架层中,​​ActivityManagerService​​​ 是一个非常重要的接口,它不但负责启动 ​​Activity​​​ 和 ​​Service​​​,还负责管理 ​​Activity​​​ 和 ​​Service​​。

​Android​​​ 应用程序框架层中的 ​​ActivityManagerService​​​ 启动 ​​Activity​​ 的过程大致如下图所示:

Android Activity 启动过程(一)_android


在这个图中,

  • ​AMS​​​ 和​​ActivityStack​​ 位于同一个进程中
  • ​ApplicationThread​​​ 和​​ActivityThread​​位于另一个进程中。

其中,​​AMS​​​ 是负责管理 ​​Activity​​​ 的生命周期的,​​AMS​​​ 还借助 ​​ActivityStack​​​ 是来把所有的 ​​Activity​​ 按照后进先出的顺序放在一个堆栈中。

对于每一个应用程序来说,都有一个 ​​ActivityThread​​​ 来表示应用程序的主进程,而每一个 ​​ActivityThread​​​ 都包含有一个 ​​ApplicationThread​​​ 实例,它是一个​​Binder​​ 对象,负责和其它进程进行通信。

Activity 启动过程

  • 无论是通过​​Launcher​​ 来启动 ​​Activity​​,还是通过 ​​Activity​​ 内部调用 ​​startActivity​​ 接口来启动新的​​Activity​​,都通过 ​​Binder​​ 进程间通信进入到 ​​ActivityManagerService​​ 进程中,并且调用​​AMS.startActivity​​ 接口;
  • ​AMS​​​ 调用 ​​ActivityStack.startActivityMayWait​​ 来做准备要启动的 ​​Activity​​ 的相关信息
  • ​ActivityStack​​​ 通知 ​​ApplicationThread​​ 要进行 ​​Activity​​ 启动调度了,这里的 ​​ApplicationThread​​ 代表的是调用​​AMS.startActivity​​ 接口的进程,对于通过点击应用程序图标的情景来说,这个进程就是 ​​Launcher​​了,而对于通过在 ​​Activity​​ 内部调用 ​​startActivity​​ 的情景来说,这个进程就是这个 ​​Activity​​ 所在的进程了;
  • ​ApplicationThread​​​ 不执行真正的启动操作,它通过调用 ​​AMS.activityPaused​​ 接口进入到 ​​AMS​​ 进程中,看看是否需要创建新的进程来启动 ​​Activity​
  • 对于通过点击应用程序图标来启动​​Activity​​ 的情景来说,​​AMS​​ 在这一步中,会调用​​startProcessLocked​​ 来创建一个新的进程,而对于通过在 ​​Activity​​ 内部调用 ​​startActivity​​ 来启动新的​​Activity​​ 来说,这一步是不需要执行的,因为新的 ​​Activity​​ 就在原来的 ​​Activity​​ 所在的进程中进行启动;
  • ​AMS​​​ 调用 ​​ApplicationThread.scheduleLaunchActivity​​ 接口,通知相应的进程执行启动 ​​Activity​​ 的操作;
  • ​ApplicationThread​​​ 把这个启动 ​​Activity​​ 的操作转发给 ​​ActivityThread​​,​​ActivityThread​​ 通过 ​​ClassLoader​​ 导入相应的 ​​Activity​​ 类,然后把它启动起来。

举报

相关推荐

0 条评论