应用程序“结束”时存储数据

时间:2012-06-18 11:55:14

标签: android database object-lifetime

我有一个小数据库,并在名为MainDataManager的类中以静态方式存储的Singleton对象中读取所需的数据提取:

public class MainDataManager {
    private static Context context;
    public static MainDataManager mainDataManager = null;

    public static MainDataManager getInstance(Context ctx) {
        context = ctx;
        if (mainDataManager == null) {  
           ...get the data from DB
          ...put the data in static mainDataManager variable 
          } 
        return mainDataManager;
        }

现在,在应用程序的每个类/活动中,我都可以轻松访问MainDataManager.mainDataManager数据。

有时我想将数据保存回数据库。

目前我在

中的每项活动上执行此操作
 @Override
    protected void onPause() {
    super.onPause();
    saveState(); //saves the mainDataManager's data to the DB
    }

我想避免这种情况,并认为如果我只在用户退出应用程序时更新数据库(无论这意味着什么),它实际上是“保存” - 或者当Android想要销毁MainDataManager对象时更好。

虽然我可以将saveState()调用放在onDestroy()方法中的活动中 - 但如果MainDataManager对象被销毁,我宁愿只将数据保存到数据库中。但普通对象没有onDestroy()

处理这个问题的最佳方法是什么?

ps我之所以不想在每个活动onDestroy()中使用saveState(),是因为保存到数据库的速度非常慢,即使数据非常少(特别是在较旧的Android手机上!),这只是不是逻辑 - 只是因为任何活动被破坏 - 然后更新数据库。

非常感谢

1 个答案:

答案 0 :(得分:1)

  

处理这个问题的最佳方法是什么?

您目前正在处理它的方式,尽管可能使用来自AsyncTask的{​​{1}},并且仅来自您正在更改数据的活动,并且可能使用某种onPause()标志告诉您是否需要保留数据。

真实的原因您不希望等到isDirtyonDestroy()无法保证被调用。

  

如果MainDataManager对象被破坏,我宁愿只将数据保存到数据库。

该对象永远不会被“破坏” - 它将一直存在直到进程终止。