我正在学习Android的基础知识,而我正在尝试保存和检索用户首选项。我正在使用物理设备(Galaxy S4)来测试应用程序。 首先,我确保应用程序调用方法'onSaveInstanceState'
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt(MyPreferences.COLOR_KEY, MyPreferences.BG_COLOR);
super.onSaveInstanceState(savedInstanceState);
Log.i("i", "In onSaveInstanceState, COLOR_KEY value saved.");
}
(BG_COLOR是一个默认值为0的int。)
已经调用了'onSaveInstanceState',我强迫应用程序在RAM管理器下通过'CLEAR RAM'关闭。
当我重新启动我的应用程序并调用onCreate时,其参数'savedInstanceState'始终为null,并且Toast pop up:“savedInstance为null”。
@Override
protected void onCreate(Bundle savedInstanceState) {
if(savedInstanceState != null){
MyPreferences.BG_COLOR = (int) savedInstanceState.getInt(MyPreferences.COLOR_KEY);
Toast.makeText(MainActivity.this,"savedInstance was NOT null", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(MainActivity.this,"savedInstance was null", Toast.LENGTH_LONG).show();
}
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
}
我想知道,我是否完全误解了实例状态是如何存储的,或者我的代码中是否存在其他错误?
答案 0 :(得分:2)
保存的实例不是用于在应用程序被杀死后恢复实例,或者在进程以某种方式结束后恢复。它是在一些配置更改之后恢复对象实例,这将会破坏并重新创建对象,例如电话被倾斜或其他东西。
重启进程后,只能为其设置空值。
在这种情况下,您最好使用Shared Preferences来跟踪您的值。
答案 1 :(得分:1)
当我重新启动我的应用程序并调用onCreate时,其参数 'savedInstanceState'总是为null,并且Toast pop up: “savedInstance为null”。
这是预期的行为。 savedInstanceState
仅在配置更改时保留,例如屏幕方向。在您的情况下,您可能希望使用共享首选项来存储您的状态