1

我有一个小型数据库,并在名为 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 对象被破坏,我宁愿只将数据保存到 DB。但是onDestroy()对于一个普通的对象是没有的。

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

ps我不想在每个活动中保存状态()的onDestroy()原因是,因为即使数据很少(尤其是在旧的Android手机上!)保存到数据库也很慢,这不是逻辑 - 只是因为任何活动正在被破坏-然后更新数据库。

非常感谢

4

1 回答 1

1

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

您目前处理它的方式,尽管可能使用AsyncTaskfrom onPause(),并且仅来自您正在更改数据的活动,并且可能使用某种isDirty标志来让您知道数据是否需要持久化。

您不想等到的真正onDestroy()原因是onDestroy()不能保证被调用。

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

该对象永远不会被“销毁”——它会一直存在到进程终止。

于 2012-06-18T13:28:41.770 回答