[英]onRestoreInstanceState is never called / savedInstanceState is always null
[英]Why onRestoreInstanceState() never gets called
我试图在我的活动中保存数据而不是恢复它。 我将数据保存在onSaveInstanceState()
中,然后尝试在onRestoreInstanceState()
中恢复数据。
我设置了断点,方法onSaveInstanceState()
被调用。 但是onRestoreInstanceState()
或onCreate()
从来没有。
这是我的步骤:
Activity
。onSaveInstanceState()
被调用。Activity
。 此时,只有onRestart()
被调用。 但不是onRestoreInstanceState()
或onCreate()
。
有谁知道为什么?
来自文档:
仅当存在要恢复的已保存状态时,系统才会调用 onRestoreInstanceState()。
好吧,如果onRestart()
,实例变量的值将由应用程序堆栈本身维护,因此您不需要恢复它们。
onCreate()
方法仅在调用Activity
的onStop()
并且进程被终止时调用。
请参考Activity
生命周期Android Activity Life Cycle以获得清晰的理解。
您可能想检查是否调用了onStop()
方法以及您的进程是否被终止。 我不认为您的流程会被您所描述的场景杀死。
onRestoreInstanceState()
方法非常棘手。 我不知道它到底是什么时候被调用的,但我看到它在从 Potrait 变为 Landscape 时被调用了一次。
请按照以下步骤操作(使用 Android Studio):
在您的模拟器上启动该应用程序。 你会看见:
I/AppState﹕onCreate
I/AppState﹕onStart
I/AppState﹕onResume
按 Ctl-F12 旋转模拟器。 你会看见:
I/StateChange﹕onPause
I/StateChange﹕onSaveInstanceState
I/StateChange﹕onStop
I/StateChange﹕onDestroy
I/StateChange﹕onCreate
I/StateChange﹕onStart
I/StateChange﹕onRestoreInstanceState
I/StateChange﹕onResume
这会通过对设备进行配置更改(例如从纵向旋转到横向)来破坏和重新创建活动。
请参阅下面的链接,了解如何在真实设备或模拟器中测试onSaveInstanceState()
和onRestoreInstanceState()
。
此方法使用 AlwaysFinish 设置,它比终止进程更简单、更快速。 该方法还提供了Activity
级别的控制,而不是进程级别的控制:
这是我针对真实设备的解决方案,因此调用了 onRestoreInstanceState。
manifest
中删除这部分android:configChanges="orientation"
manifest
中删除这部分android:screenOrientation="portrait"
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
然后运行您的应用程序,旋转您的设备。 而已。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.