onSaveInstanceState和onRestoreInstanceState的调用时机

1.Activity被系统销毁

// 1.按Home键回到桌面
E/MainActivity: onPause
E/MainActivity: onStop
E/MainActivity: onSaveInstanceState
E/MainActivity: onDestroy
// 2.点击应用图标,重新进入应用
E/MainActivity: onCreate
E/MainActivity: onStart
E/MainActivity: onRestoreInstanceState
E/MainActivity: onResume

2.屏幕旋转

E/MainActivity: onPause
E/MainActivity: onStop
E/MainActivity: onSaveInstanceState
E/MainActivity: onDestroy
E/MainActivity: onCreate
E/MainActivity: onStart
E/MainActivity: onRestoreInstanceState
E/MainActivity: onResume

3.Home键

// 1.按Home键回到桌面
E/MainActivity: onPause
E/MainActivity: onStop
E/MainActivity: onSaveInstanceState
// 2.点击应用图标,重新进入应用
E/MainActivity: onStart
E/MainActivity: onResume

4.跳转其他Activity

E/MainActivity: onPause
E/MainActivity: onStop
E/MainActivity: onSaveInstanceState

5.finish和点击回退

E/MainActivity: onPause
E/MainActivity: onStop
E/MainActivity: onDestroy

总结:
如果用户主动关闭Activity,方法不会调用;
如果用户离开Activity(按Home键回到桌面或跳转到其他Activity)那么当Activity不可见的时候,就会调用onSaveInstanceState(Bundle outState),来保存UI数据,因为当Activity不可见的时候,它的优先级最低,在系统内存不足时,最容易被系统销毁。
如果该方法被调用,那么在Android 9.0之后,保存方法会在onStop()方法之后调用;在Android 9.0之前,保存方法在onStop()方法之前调用,但不能保证是在onPause()方法之前还是之后调用。
如果onRestoreInstanceState(Bundle)方法被调用,那么是在onStart()之后,onResume()之前被调用。

你可能感兴趣的:(onSaveInstanceState和onRestoreInstanceState的调用时机)