onCreate 参数:'savedInstance' 始终为空

onCreate param: 'savedInstance' is allways null

我正在学习 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 的整数)。

已调用 'onSaveInstanceState',我在 RAM 管理器下通过 'CLEAR RAM' 强制关闭应用程序。

当我重新启动我的应用程序并调用 onCreate 时,其参数 'savedInstanceState' 始终为 null,并且 Toast 弹出:"savedInstance was 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);
}

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

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

进程重新启动后,您只能为它设置空值。

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

When i restart my app and onCreate is called, its parameter 'savedInstanceState' is allways null, and the Toast pop's up: "savedInstance was null".

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