我的活动在没有输入OnSaveInstanceState句柄的情况下关闭

时间:2014-11-15 17:21:23

标签: java android eclipse android-activity

我通过点击一个按钮关闭我的第二个活动,然后触发一个"完成()"方法。这应该与按下设备上的后退按钮相同,就可以了。 问题是它没有进入OnSaveInstanceState,这将在销毁一个活动时发生。结果是,再次重新调用此活动后,savedInstanceState == null,因此我无法保存我的最后一个变量'状态。

    Button closeButton = (Button) findViewById(R.id.bClose); 
    closeButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            finish();

1 个答案:

答案 0 :(得分:1)

来自onSaveInstaceState的官方文档:

  

不要将此方法与活动生命周期回调混淆,例如   onPause(),在放置活动时始终调用   背景或正在破坏的路上,或onStop()   在破坏之前召集。 onPause()和onStop()的一个例子   被调用,而不是这个方法是用户导航回来的时候   活动B到活动A :没有必要打电话   B上的onSaveInstanceState(Bundle)因为那个特定的实例会   永远不会被恢复,所以系统避免调用它。 一个例子   调用onPause()而不是onSaveInstanceState(Bundle)是什么时候   活动B在活动A前面启动:系统可能会避免   如果没有被杀死,则在活动A上调用onSaveInstanceState(Bundle)   在B的生命周期中,因为A的用户界面的状态   将保持不变。

您有两个未调用onSaveInstanceState的示例。最重要的部分是开始:

  

不要将此方法与活动生命周期回调混淆,例如onPause(),当活动被放置在后台或正在销毁时,它总是被调用。

不应该期望每次都会调用onSaveInstanceState。此方法允许活动保存其 UI元素。如果您尝试持久保存变量值或其他内容(即视图中包含的值,但应该是应用程序的生命周期 - 例如用户名),则应使用其他机制,如SharedPreferences

<强>来源

Activity.onSaveInstanceState(Bundle) reference