我有一个小数据库,并在名为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手机上!),这只是不是逻辑 - 只是因为任何活动被破坏 - 然后更新数据库。
非常感谢
答案 0 :(得分:1)
处理这个问题的最佳方法是什么?
您目前正在处理它的方式,尽管可能使用来自AsyncTask
的{{1}},并且仅来自您正在更改数据的活动,并且可能使用某种onPause()
标志告诉您是否需要保留数据。
真实的原因您不希望等到isDirty
,onDestroy()
无法保证被调用。
如果MainDataManager对象被破坏,我宁愿只将数据保存到数据库。
该对象永远不会被“破坏” - 它将一直存在直到进程终止。