跳转至

Activity

生命周期

关于Activity的生命周期,可以参考官方文档:

需要注意的是:onStop()在Activity不可见时会调用,如果打开的是一个透明的Activity,就不会回调onStop(),当关闭透明Activity时,也不会回调onRestart()和onStart()。onStart()在Activity可见时调用,刚好与onStop()相反。当打开一个非Activity的Dialog时,不会触发生命周期方法回调(官方文档上说会弹出Dialog会调用onPause(),实测并没有调用)。

当两个Activity A和B,如果A启动B,然后转屏B会销毁重建,当返回A,A会重建。如果B是一个透明Activity,A和B都会重建,并且A会调用onPause(),

保存和恢复状态

参考文档:

状态保存

当正常点击返回键和调用finish()不会调用onSaveInstanceState(),其他情况当应用不可见时,就会调用,比如:

onSaveInstanceState()的与生命周期方法的调用顺序。9.0及其之后发生在onStop()之后。之前的版本可能发生在onPause()之前或者之后。

状态恢复

[onCreate()](https://developer.android.com/reference/android/app/Activity#onCreate(android.os.Bundle)) 和 [onRestoreInstanceState()](https://developer.android.com/reference/android/app/Activity#onRestoreInstanceState(android.os.Bundle)) 回调方法均会收到包含实例状态信息的相同 [Bundle](https://developer.android.com/reference/android/os/Bundle)。无论系统是新建 Activity 实例还是重新创建之前的实例,都会调用 [onCreate()](https://developer.android.com/reference/android/app/Activity#onCreate(android.os.Bundle)) 方法。官方文档中说仅当存在要恢复的已保存状态时,系统才会调用 [onRestoreInstanceState()](https://developer.android.com/reference/android/app/Activity#onRestoreInstanceState(android.os.Bundle))。何时需要恢复?假设两个Activity A和B,A打开B,会调用onSaveInstanceState(),然后依次关闭B和A、再次打开A并没有调用onRestoreInstanceState()。如果A打开B,然后强制杀死应用,再次打开A亦然不会调用onRestoreInstanceState()。在转屏的时候会调用onSaveInstanceState()和onRestoreInstanceState()。

启动模式

参考文档: