Cda7ae2ca12211e6fe76bfa9d091094e
重学安卓:Activity 生命周期的 3 个辟谣

温馨提示:如果这是第一次接触《重学安卓》,可借助 这份在 GitBook 上维护的 “导读” 来快速了解《重学安卓》专栏、获取它的目录、试读内容,以及了解它的最新动态 和 发展状况。

截至目前,专栏已对 体系化文章 做了 830 余次修订,数十位群友告诉我 受专栏的启发 他们也开启了写作之路。群里不定期会有小伙伴讨论适配问题、分享原创的开源库 和 提供内推机会,订阅后可随时进群交流。

前言

上一期我在小专栏分享了《重学安卓:Activity 的快乐你不懂!》,原本只是想给大家一把进阶的钥匙,让大家无痛地对 “显示系统大家族” 的整体脉络先有个感性的认识,继而埋下了好奇的种子、推动自己深入地去探究。

没想到,在复盘 “Activity 生命周期” 的过程中,我发现网上盛传的关于 Activity 生命周期的几十篇文章中:没有一篇愿意追根溯源、深入地介绍 “进程模式”、以及结合进程模式探究 “生命周期如此设计的依据”,恰恰相反,它们 多是在堆砌文字、以讹传讹

比如,“Activity 在 onStart 时是可见的,只是此时你看不见它 ~ ”,

又如,“当 Activity 处于 onStop 时可能被系统回收” ……

你是不是被这些 似是而非的说法 糊弄了许多年?

考虑到未经深度思考的内容,根本不能算作知识、更不可能被人理解、记住和灵活运用。于是经过再三考虑,我便烦着自己再为生命周期写上一篇,并在 GitHub 上开源了《重学安卓知识点测试代码》的项目(不要慌,文末链接已给出)。

所以如果通过本文,你对 进程模式、生命周期 的存在意义 以及彼此间的关系 有了正确的认识,那我的这番功夫就没有白费 ~

文章目录一览

  • 前言
  • 不得不先讲的进程模式
  • 前景模式、可见模式,二者的区别?
  • Activity 的正常生命周期
  • 生命周期节点与进程模式的对应关系?
  • 为何存在生命周期的设计?
  • 节点的特点、区别,及注意事项?
  • Note 2020.9.26 加餐:
    • 关于 “不建议在 onPause 和 onStop 中做耗时操作” 的独家理解 和 应对技巧分享
  • 辟谣时间到 ~

不得不先讲的进程模式

许多文章会跳过进程模式,直接开始讲生命周期,导致很多细节都是一笔带过、甚至张冠李戴

因此我们先从进程模式开始讲。

如果此前你没有明确过这个概念,那么务必借着这个机会了解一下 ~

何谓进程模式?

Android 平台的 App,通常情况下都是单进程。

由于 Android 平台资源有限,需要为不同进程设置优先级,以便在系统资源紧张的情况下,将优先级较低的进程杀死,以释放资源

因而,进程模式的存在就是为了标记和区分进程的优先级。

存在哪几种进程模式?

按优先级从高到低,进程模式主要包含:

前景进程可见进程服务进程背景进程空白进程 这 5 大类别。

通常,App 进程的级别,由其活跃的或处于栈顶的组件的活动状况(比如所处生命周期)决定

例如,当一个 App 的 Activity 处于 onResume那么该 Activity 所在的整个进程都会成为前景进程

划重点 👆 👆 👆

于此同时,需要再次强调的是,当系统回收资源时,针对的是 App 的进程,而不是针对 App 进程中的某个组件。(此处对应文末的 “辟谣 2”)

划重点 👆 👆 👆

前景模式、可见模式,二者的区别?

由于手机屏幕空间有限,一次只能展示一个窗口,但如果你拿 PC 来考虑,就不难理解为何要同时存在 “前景” 和 “可见” 这两种概念。

前景模式就相当于 PC 中 “获得焦点” 的窗口。

可见模式即是那些你可以看见,但 “失去焦点” 的窗口。

在 Remix OS 等安卓桌面操作系统中,你就会理解这样设计的价值。

划重点 👆 👆 👆

介绍完进程模式,下面我们开始结合 进程模式 来介绍 生命周期。

Activity 的正常生命周期

Activity 生命周期包含正常流程和重建流程。

考虑到本文的主题是介绍 进程模式和生命周期 的概念及对应关系,加上 重建流程除了流程本身,还涉及到 状态保存和恢复 等知识,因而 重建流程 的内容我们放在未来某个单独的文章来介绍。

生命周期的流程与进程模式的关系?

Activity 生命周期节点

onCreateonStartonResumeonPauseonStoponDestroyonRestart

Activity 启动流程:

Activity 销毁流程:

当 App 处于背景模式时,相当于 PC 上窗口被最小化,随时有可能被系统回收

划重点 👆 👆 👆

top Created with Sketch.