【问题标题】:storing data when app "ends"应用程序“结束”时存储数据
【发布时间】:2012-06-18 11:55:13
【问题描述】:

我有一个小型数据库,并读取了一个像这样静态存储在名为 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() 中保存 saveState() 的原因是,因为即使数据很少(尤其是在较旧的 Android 手机上!),保存到数据库也很慢,这不是逻辑 - 仅仅因为任何活动都被破坏 - 然后更新数据库。

非常感谢

【问题讨论】:

    标签: android database object-lifetime


    【解决方案1】:

    最好的处理方法是什么?

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

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

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

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

    【讨论】:

    • 再次感谢:-)。好的,那么我就让它保持原样,但是,如前所述,即使更新最小的数据库也很慢,也许“isDirty”标志可以减少它需要更新的时间。在 AsyncTask 中执行当然是一个很好的出路 - 但是,我不确定 AsyncTask 的执行顺序实际上总是正确的。除了关于确保“同步”更新方法的小问题。
    • @user387184:对SQLiteDatabase 的访问在SQLiteDatabase 级别同步,因此您不必担心这个特定问题。您还可以更主动地存储数据(例如,基于 UI 事件)而不是在相关的情况下等待。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多