今天做了一个Demo测试,主要测试OnSaveInstanceState()方法在什么情况下会走。
1.点击Home键
当在一个Activity中,点击Home键时,打印出的log,中Activity的生命周期依次走的是,如图所示:
结果发现在OnPause()和OnStop()方法中间走的OnSaveInstanceState();
当再次从手机中程序运行的栈中,点击这个Activity,恢复当前这个Activity时候,生命周期走的是,如图所示:
结果生命周期没有变化。
当在开发者选项中,勾选上“不保留活动(用户离开后即销毁每个活动)”后,再次点击Home键,走的生命周期是,如图所示:
结果发现比之前多了一个OnDestroy()。
当再次从活动栈的列表中点击刚才的这个Actiivty时候,走的声明周期是,如图所示:
结果发现,如果选择上“不保留活动”的话,每一个Activity都会销毁,然后再次启动的时候都会重新走OnCreate()方法。
2.点击back键
1)没有勾选“不保留活动”
点击右下角的back键,走的生命周期是,如图所示:
2)勾选上“不保留活动”
点击右下角的back键,走的生命周期是,如图所示:
结果生命周期没有变化,唯一不同的是,点击了back键,不会再走OnSaveInstanceState(),对于这种主动要求退出的行为,app不会走OnSaveInstanceState()这个方法。
由此得出的结论是:
Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
转载自原文链接, 如需删除请联系管理员。
原文链接:Activity点击Home键,Back()键所走的生命周期,转载请注明来源!