Android:试图保存数据,但在第二次 onDestroy() 时丢失了

Android: trying to save data but it's being lost on the second onDestroy()

基本上,我正在尝试使用我的 Android 应用程序保存和加载数据。当按下主页按钮并重新进入应用程序时,它会按预期工作。即使是第一次通过应用程序管理器关闭应用程序,它也会加载正确的数据(目前只有一个整数用于测试目的)。第二次通过应用程序管理器关闭应用程序时,数据丢失了,即使它使用与第一次相同的方法被杀死。在下面找到处理任何保存、加载和相关方法的代码。

Android 生命周期方法:

public int setting1 = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);

    loadData();

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    AdView mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
}

@Override
public void onPause() {
    super.onPause();
    saveData();
}

@Override
public void onStop() {
    super.onStop();
    saveData();
}

@Override
public void onDestroy() {
    super.onDestroy();
    saveData();
}

@Override
public void onResume() {
    super.onResume();

    loadData();

    updateUnlockables(setting1);
}

保存和加载方法:

public void saveData(){
    String filename = "icesSave.asv";
    FileOutputStream fos;

    try {
        fos = openFileOutput(filename, Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeInt(setting1);
        oos.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void loadData(){
    String filename = "icesSave.asv";
    FileInputStream fis;

    try{
        fis = openFileInput(filename);

    } catch (FileNotFoundException ex){
        return;
    }
    try {

        ObjectInputStream ois = new ObjectInputStream(fis);
        setting1 = ois.readInt();
        ois.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

saveData() 应该在 super

之上

不要在所有 3 种方法中使用 saveData(),因为它们的过程相同

        @Override
        public void onPause() {
     saveData();
            super.onPause();

        }

        @Override
        public void onStop() {
 saveData();
            super.onStop();

        }

        @Override
        public void onDestroy() {
    saveData();
            super.onDestroy();

        }