我正在尝试在我的活动中保存数据而不是恢复它。
我将数据保存在onSaveInstanceState()
上,然后尝试恢复onRestoreInstanceState()
中的数据。
我设置了断点,方法onSaveInstanceState()
被调用。但onRestoreInstanceState()
或onCreate()
从未这样做过。
这是我的步骤:
Activity
。onSaveInstanceState()
被召唤。Activity
。 此时,只有onRestart()
被调用。但不是onRestoreInstanceState()
或onCreate()
。
有谁知道为什么?
答案 0 :(得分:16)
来自doc:
仅当存在要恢复的已保存状态时,系统才会调用onRestoreInstanceState()。
答案 1 :(得分:13)
好吧,如果调用onRestart()
,实例变量的值将由应用程序堆栈本身维护,因此您无需还原它们。
onCreate()
方法仅在调用Activity
的{{1}}并且该进程被终止时调用。
请参阅onStop()
生命周期Android Activity Life Cycle以获得清晰的理解。
您可能想要检查是否调用了Activity
方法以及您的进程是否被终止。我不认为您的过程会被您描述的场景杀死。
onStop()
方法非常棘手。我不知道它究竟何时被调用,但我看到它在从Potrait变为Landscape时被调用了一次。
答案 2 :(得分:6)
答案 3 :(得分:3)
请按照以下步骤操作(使用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
这会通过对设备进行配置更改(例如从纵向旋转到横向)来导致活动的破坏和重新创建。
答案 4 :(得分:2)
请参阅以下链接,了解如何在真实设备或模拟器中测试onSaveInstanceState()
和onRestoreInstanceState()
。
此方法使用AlwaysFinish设置,该设置比终止进程更简单,更快捷。此方法还提供Activity
- 级别控制而不是进程级别控制:
答案 5 :(得分:0)
这是我对真实设备的解决方案,因此onRestoreInstanceState可以调用它。
android:configChanges="orientation"
中有关活动的部分中,删除此部分manifest
android:screenOrientation="portrait"
中有关活动的部分中删除此部分 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
defaultPageSize = 10;
defaultPageNumber =1;
Response response = call3rdPartyService(defaultPageSize,defaultPageNumber,request);
totalRecords = response.totalRecords();
pageNumberToIterate = (totalRecords + defaultPageSize -1 ) / defaultPageSize;
for(int i=2;i<=pageNumberToIterate ;i++){
call3rdPartyService(defaultPageSize,i,request);
}
然后运行您的应用,旋转设备。 就是这样。