如何在关闭的应用程序上保存对象

时间:2017-01-21 09:10:16

标签: android

我有一个对象是我想要保存的对象。每当我更改对象的状态时,我都通过在对象上调用以下方法save()来成功保存对象。

public void save() {

    String fileName = "MyObject";

    try {
        FileOutputStream fileOutputStream = ctx.openFileOutput(fileName, Context.MODE_PRIVATE);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
        objectOutputStream.writeObject(this);
        objectOutputStream.close();
        fileOutputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

但是,每次对象状态更改时调用save()方法都变得乏味。我只想在应用程序关闭时保存对象,每次更改对象的状态时,只需调用save()一次,而不是多次。

现在我已经了解了有多种方法来定义“关闭应用程序”,我已经开始审查应用程序生命周期diagram。在我看来,有两种方法onPause()onStop()按以下顺序调用。

  

onPause()当系统在后台处于应用程序时杀死该应用程序

     

onStop() - >用户杀死应用程序时的OnDestroy()

所以我想通过覆盖onPause()onStop()并在这两种方法中调用save(),我会保存我想要在每个可能的场景中保存的对象以某种方式关闭或杀死应用程序。

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

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

但是,似乎并非如此,我的对象没有被保存。我对应用程序生命周期的理解是不正确的还是我的代码可能会被错误地删除?

2 个答案:

答案 0 :(得分:0)

你所做的事情应该尽我所能。保存在onStop中仍然无用,因为系统地首先调用onPause

您确定要记得在onResume中保存的内容吗?

答案 1 :(得分:0)

我认为我自己的问题。是的,我做的一切都正确,对象正在被保存。我错了。问题是MyObject中的一个变量内部的变量没有实现Serializable