Android组件中,Activity的生命周期是最复杂的。首先看一下完整的Activity生命周期图。

这张图粗略地表示了一个Activity从启动到销毁完整的生命周期。但是这篇文章想要探究Activity生命周期的更多细节。接下来的内容要看看Activity在一些特殊的场景下会有怎样的表现,生命周期中各个回调的执行顺序。这些会通过一个Demo的Log来展现。Demo的源码可以在这里找到。
场景1
首先是Activity正常启动然后销毁的流程。
1 | // 启动MainActivity后按下HOME键 |
场景2
启动Activity后翻转屏幕,未做任何处理的情况下。
1 | 2534-2534/com.cm.ts.activity D/MainActivity[DEBUG]: onCreate |
场景3
启动Activity后启动另一个Activity,然后返回并销毁。
1 | 2534-2534/com.cm.ts.activity D/MainActivity[DEBUG]: onCreate |
场景4
singletask模式或singleinstance模式的Activity重新启动和singletop模式在task顶部重新启动。
1 | 2534-2534/com.cm.ts.activity D/SingleTaskActivity[DEBUG]: onCreate |
场景5
singletask模式或singleinstance模式的Activity启动新的Activity,新的Activity再启动老的Activity。
1 | 2534-2534/com.cm.ts.activity D/SingleInstanceActivity[DEBUG]: onCreate |
总结
经过这个实验搞清楚了一些比较容易忽略的细节
onSaveInstanceState在onPause和onStop之间执行,onRestoreInstanceState在onStart和onResume之间执行。- Activity A在启动Activity B时,流程是
A.onPause->B.onCreate->B.onStart->B.onResume->A.onStop。返回时A.onRestart在B.onPause和A.onStart之间执行。 - 在一些具有特殊启动模式的Activity重新启动自己时。流程是
onPause->onNewIntent->onResume。 - 其他Activity A重新启动具有特殊启动模式的Activity B时。流程是
A.onPause->B.onNewIntent->B.onRestart->B.onStart->B.onResume->A.onStop。 - 还有两个比较不常见的方法
onPostCreate和onPostResume分别在onCreate和onResume执行完毕后回调,是成对出现的。流程是onCreate->onStart->onPostCreate->onResume->onPostResume。
关于启动模式的一个细节
singletask模式启动不一定会新开一个task。重新启动时只会清理在其上方的Activity,它更像是用FLAG_ACTIVITY_CLEAR_TOP启动的效果。
在指定taskaffinity后,会兼具FLAG_ACTIVITY_NEW_TASK的功能。
一个launchMode为standard类型的Activity在使用FLAG_ACTIVITY_CLEAR_TOP启动时,会销毁自己及自己上方的Activity再创建自己,如果想要保持不销毁并调用onNewIntent方法,需要与FLAG_ACTIVITY_SINGLE_TOP一起使用,效果与指定launchMode为singleTask相同。