onCreate param:'savedInstance'总是为null

时间:2015-06-15 09:49:10

标签: android oncreate

我正在学习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);
}

我想知道,我是否完全误解了实例状态是如何存储的,或者我的代码中是否存在其他错误?

2 个答案:

答案 0 :(得分:2)

保存的实例不是用于在应用程序被杀死后恢复实例,或者在进程以某种方式结束后恢复。它是在一些配置更改之后恢复对象实例,这将会破坏并重新创建对象,例如电话被倾斜或其他东西。

重启进程后,只能为其设置空值。

在这种情况下,您最好使用Shared Preferences来跟踪您的值。

答案 1 :(得分:1)

  

当我重新启动我的应用程序并调用onCreate时,其参数   'savedInstanceState'总是为null,并且Toast pop up:   “savedInstance为null”。

这是预期的行为。 savedInstanceState仅在配置更改时保留,例如屏幕方向。在您的情况下,您可能希望使用共享首选项来存储您的状态