单击后退按钮后重新创建活动状态

时间:2016-03-03 18:43:19

标签: android

当我在onSaveInstanceState方法中成功地将数据保存到Bundle时,我无法找出为什么savedInstanceState在onCreate方法中始终为null。 当我在AVD上运行我的程序并单击后退按钮(销毁活动),然后通过单击其图标再次创建它时,保存的状态始终为空。 这是一个测试这个问题的简单程序。

package com.example.myTestApp;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button)findViewById(R.id.button);
        if(savedInstanceState == null){
            button.setText("No");
        }else{
            button.setText("Yes");
        }
    }

    static final String STATE_SCORE = "playerScore";
    static final String STATE_LEVEL = "playerLevel";
    private int mCurrentScore = 1;
    private int mCurrentLevel = 2;


    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);

        savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
        savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);

    }
}

如果可能的话,请告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

这是预期的。按下后,活动将被销毁,其中的数据将丢失。在此之后,当您重新打开应用程序时,正在创建新的新实例时,您将始终在包中获得null。

Bundle savedInstanceState用于在由于某些更改(如旋转)重新创建活动时使用,或者因为它在后台暂停了很长时间。

如果你想保留一些数据,可以考虑使用SharedPreferences来处理小东西,或者考虑数据库(SQLite,Realm)或大文件的文件。