理解Activity生命周期的回调
Activity 生命周期可以想成一座金字塔:系统按台阶调用回调。新建实例时回调把状态往上推;到塔尖就是前台、用户可以交互。退出时再往下走,好回收资源。有时它会停在半山腰等着(切到别的 App),用户回来还能回到塔尖,并尽量恢复离开时的状态。
一、金字塔比旧生命周期图更好懂
Figure 1。这张图讲 Activity 生命周期(金字塔模型比早期 Dev Guide 里的图更形象):
不一定要实现全部回调,但要知道每个方法干什么,App 才能按用户预期工作:
-
来电或切到其它 App 时不要 crash。 -
用户没在用某个组件时,不要空耗系统资源。 -
离开一段时间再回来,不要丢掉进度。 -
屏幕旋转时不要 crash,也不要丢进度。
二、三个能停得住的状态
图中各生命状态里,只有三个是静态的,Activity 可以在上面待比较久(其余很快切走):
-
Resumed:前台,用户可交互(常叫 running)。 -
Paused:被另一个 Activity 挡住——后者到了前台,但是半透明、没铺满。暂停的 Activity 不再接收输入,也不再执行界面相关代码(后台线程不一定停)。 -
Stopped:完全隐藏,用户看不见,相当于在后台。实例和状态信息还在,但不能执行代码。
Created 与 Started 都很短:系统很快跑完回调并进入下一态。也就是调用 onCreate() 之后迅速 onStart(),再迅速 onResume()。这就是基本生命周期。
| 状态 | 可见 / 可交互 | 会不会久停 |
|---|---|---|
| Created / Started | 过渡 | 否,立刻进入下一回调 |
| Resumed | 前台可交互 | 是 |
| Paused | 部分可见,不接收输入 | 是 |
| Stopped | 完全不可见 | 是(实例仍在) |
三、七个回调与三层嵌套循环
这七个方法定义完整生命周期,也可以看成三层嵌套循环:
完整生命周期:第一次 onCreate() 到 onDestroy()。在 onCreate 里设全局状态、完成初始化;在 onDestroy 里释放系统资源。例如后台下载线程:onCreate 创建,onDestroy 销毁。
可视生命周期:onStart() 到 onStop()。用户能在屏幕上看到它,即使不一定在前台交互。这两个方法之间适合保留「给用户看界面」所需的资源。例如在 onStart 注册 BroadcastReceiver 监控会影响 UI 的变化,onStop 里注销。可见性变化时 onStart / onStop 可能多次调用。
前台生命周期:onResume() 到 onPause()。此时在最上面与用户交互。休眠或新 Activity 启动会走 onPause;拿到结果或新 Intent 会走 onResume。暂停/恢复会非常频繁。
一句话总结:能久停的是 Resumed / Paused / Stopped;onCreate→onDestroy 管全局资源,onStart→onStop 管「看得见」,onResume→onPause 管「正在交互」。
转载请注明来源:理解Activity生命周期的回调








