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

前言

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

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

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

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

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

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

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

文章目录一览

  • 前言
  • 不得不先讲的进程模式
  • 前景模式、可见模式,二者的区别?
  • Activity 的正常生命周期
  • 生命周期节点与进程模式的对应关系?
  • 为何存在生命周期的设计?
  • 节点的特点、区别,及注意事项?
  • 辟谣时间到 ~

不得不先讲的进程模式

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

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

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

何谓进程模式?

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

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

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

存在哪几种进程模式?

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

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

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

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

划重点 👆 👆 👆

于此同时,需要再次强调的是,当系统回收资源时,杀死的是进程、是整个 App,而不是 App 中的单个组件

划重点 👆 👆 👆

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

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

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

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

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

划重点 👆 👆 👆

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

Activity 的正常生命周期

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

top Created with Sketch.