Activity点击Home键,Back()键所走的生命周期

今天做了一个Demo测试,主要测试OnSaveInstanceState()方法在什么情况下会走。

1.点击Home键

当在一个Activity中,点击Home键时,打印出的log,中Activity的生命周期依次走的是,如图所示:
Activity点击Home键,Back()键所走的生命周期_第1张图片
结果发现在OnPause()和OnStop()方法中间走的OnSaveInstanceState();

当再次从手机中程序运行的栈中,点击这个Activity,恢复当前这个Activity时候,生命周期走的是,如图所示:
Activity点击Home键,Back()键所走的生命周期_第2张图片
结果生命周期没有变化。

当在开发者选项中,勾选上“不保留活动(用户离开后即销毁每个活动)”后,再次点击Home键,走的生命周期是,如图所示:
Activity点击Home键,Back()键所走的生命周期_第3张图片
结果发现比之前多了一个OnDestroy()。
当再次从活动栈的列表中点击刚才的这个Actiivty时候,走的声明周期是,如图所示:
这里写图片描述
结果发现,如果选择上“不保留活动”的话,每一个Activity都会销毁,然后再次启动的时候都会重新走OnCreate()方法。

2.点击back键

1)没有勾选“不保留活动”
点击右下角的back键,走的生命周期是,如图所示:
这里写图片描述
2)勾选上“不保留活动”
点击右下角的back键,走的生命周期是,如图所示:
Activity点击Home键,Back()键所走的生命周期_第4张图片

结果生命周期没有变化,唯一不同的是,点击了back键,不会再走OnSaveInstanceState(),对于这种主动要求退出的行为,app不会走OnSaveInstanceState()这个方法。

由此得出的结论是:
Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

你可能感兴趣的:(android)