1.针对上图,添加几点说明
(1)针对一个特定的 Activity,第一次启动,回调如下:onCreate -> onStart -> onResume.
(2)当前用户打开新的Activity 或者 切换到桌面的时候,回调如下:onPause -> onStop.如果新的Activity采用透明主题,那么当前Activity不会回调onStop.
(3)当前用户在此回到原Activity时,回调如下:onRestart -> onStart ->onResume.
(4)当前用户按back键回退时,回调如下: onPause ->onStop -> onDestory.
(5)从整个生命周期来说,onCreate和onDestory是配对的,分别标志着 Activity的创建和销毁,并且只可能又一次调用。从Activity是否可见来说onStart 和 onStop 是配对的,随着用户的操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次;从Activity是否在前台来说,onResume 和 onPause 是配对的。随着用户操作或者设备的点亮和熄灭这两个方法可能被调用多次。
2.针对生命周期提出两个问题
(1)onStart 和 onResume 、onPause 和 onStop 从描述上来看差不多,对于我们来说有什么实质的不同?
从实际使用过程来说 onStart 和 onResume 、onPause 和 onStop 看起来并没有明显区别。从系统回调角度来看,onStart 和 onStop 是从activity是否可见这个角度来回调的,onResume 和 onPause是从activity是否位于前台这个角度来回调的。
(2)假设当前 Activity 为A,如果这事用户打开一个新的Activity B,那么B的 onResume和 A 的 onPause 那个先执行?
通过验证发现,旧的Activity的 onPause 先执行,然后新的 Activity 才启动。 Android 官方文档对onPause的解释有这么一句:不能在 onPause 中做重量级的操作,以为必须onPause 执行完成之后 新Activity 才能 resume。我们知道 onPause 和 onStop 都不能执行耗时的操作,尤其是 onPause,这意味着应当尽量在onStop中做操作,从而使得新Activity 尽快洗那是出来并切换到前台。
PS: 本文是对《Android 开发艺术探索》一书的阅读笔记,想了解原文 请自行搜索。