返回介绍

结语

发布于 2025-02-28 12:35:45 字数 1791 浏览 0 评论 0 收藏 0

OK,到这里,这篇文章算是告一段落了,我们再回头看看一开始的几个问题,你还困惑吗?

  • 一个 App 是怎么启动起来的?
  • App 的程序入口到底是哪里?
  • Launcher 到底是什么神奇的东西?
  • 听说还有个 AMS 的东西,它是做什么的?
  • Binder 是什么?他是如何进行 IPC 通信的?
  • Activity 生命周期到底是什么时候调用的?被谁调用的?

再回过头来看看这些类,你还迷惑吗?

  • ActivityManagerServices,简称 AMS,服务端对象,负责系统中所有 Activity 的生命周期
  • ActivityThread,App 的真正入口。当开启 App 之后,会调用 main() 开始运行,开启消息循环队列,这就是传说中的 UI 线程或者叫主线程。与 ActivityManagerServices 配合,一起完成 Activity 的管理工作
  • ApplicationThread,用来实现 ActivityManagerService 与 ActivityThread 之间的交互。在 ActivityManagerService 需要管理相关 Application 中的 Activity 的生命周期时,通过 ApplicationThread 的代理对象与 ActivityThread 通讯。
  • ApplicationThreadProxy,是 ApplicationThread 在服务器端的代理,负责和客户端的 ApplicationThread 通讯。AMS 就是通过该代理与 ActivityThread 进行通信的。
  • Instrumentation,每一个应用程序只有一个 Instrumentation 对象,每个 Activity 内都有一个对该对象的引用。Instrumentation 可以理解为应用进程的管家,ActivityThread 要创建或暂停某个 Activity 时,都需要通过 Instrumentation 来进行具体的操作。
  • ActivityStack,Activity 在 AMS 的栈管理,用来记录已经启动的 Activity 的先后关系,状态信息等。通过 ActivityStack 决定是否需要启动新的进程。
  • ActivityRecord,ActivityStack 的管理对象,每个 Activity 在 AMS 对应一个 ActivityRecord,来记录 Activity 的状态以及其他的管理信息。其实就是服务器端的 Activity 对象的映像。
  • TaskRecord,AMS 抽象出来的一个“任务”的概念,是记录 ActivityRecord 的栈,一个“Task”包含若干个 ActivityRecord。AMS 用 TaskRecord 确保 Activity 启动和退出的顺序。如果你清楚 Activity 的 4 种 launchMode,那么对这个概念应该不陌生。

如果你还感到迷惑的话,就把这篇文章多读几遍吧,信息量可能比较多,需要慢慢消化~

尊重原创,转载请注明:From 凯子哥( http://blog.csdn.net/zhaokaiqiang1992 ) 侵权必究!

关注我的微博,可以获得更多精彩内容

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文