Android 不同活动中的数据库操作顺序

Android 不同活动中的数据库操作顺序,android,database,android-sqlite,Android,Database,Android Sqlite,我有两个活动,分别是ActivityA和ActivityB,顺序如下: 活动A-->活动B 现在这两个活动将读写同一个数据库,当ActivityBdestory时,我将把最后一个状态保存到数据库中,然后当用户返回ActivityA时,我将从数据库中重新加载状态 然而,我发现活动a中的读取操作总是在活动b中的写入操作之前完成: class ActivityB{ @Override protected void onDestroy() { .... m

我有两个活动,分别是
ActivityA
ActivityB
,顺序如下:

活动A-->活动B

现在这两个活动将读写同一个数据库,当
ActivityB
destory时,我将把最后一个状态保存到数据库中,然后当用户返回
ActivityA
时,我将从数据库中重新加载状态

然而,我发现
活动a
中的
读取
操作总是在
活动b
中的
写入
操作之前完成:

class ActivityB{
    @Override
    protected void onDestroy() {
        ....
        mDao.update(mItem);
        System.out.println("pro:save:" + mItem.name + ":" + mItem.progress);
//      mDatabase.close();
        super.onDestroy();
    }
}

class ActivityA{
    @Override
    protected void onResume() {
        super.onResume();
        mLocalDbLoadTask = new LocalDbLoadTask();
        mLocalDbLoadTask.execute(mItem);
    }
    class LocalDbLoadTask extends AsyncTask<Item, Void, Item> {

        @Override
        protected Item doInBackground(Item... Items) {
            Item item = Items[0];
            mItemDao.fill(item);
            return null;
        }

        @Override
        protected void onPostExecute(Item Item) {
            System.out.println("pro:load:" + mItem.name + ":" + mItem.progress);
        }
    }
}
这意味着如果在
ActivityB
更新项目,则
ActivityA
无法获取项目(示例中为14)事件的最新状态

有什么问题吗


更新:

在我将用于保存的代码从
onDestory
移动到
onPause
后,顺序是正确的,但有时仍然会得到错误的值:

08-19 03:30:00.170    5330-5330/com.kk I/System.out﹕ pro:save:xx:16
08-19 03:30:00.214    5330-5330/com.kk I/System.out﹕ pro:load:xxx:null

如图所示,
16
保存在
ActivityB
中,但
ActivityA
中得到了
null
,我认为,问题在于活动生命周期

当系统即将开始恢复以前的活动时调用onPause()
当该活动对用户不再可见时调用onStop(),因为另一个活动已恢复并覆盖此活动。
onDestroy()活动销毁前收到的最后一个调用

通常,顺序应该是
ActivityB.onPause()
->
ActivityA.onResume()
->
ActivityB.onStop()
->
ActivityB.onDestroy()
。您可以通过在
onResume()
onPause()
onDestroy()方法中放置日志调用来检查它

因此,只需在ActivityB的
onPause()
方法中写入对DB的更改


谢谢!!这正是问题所在!你救了我的命。:)哦,很抱歉,即使顺序是对的,我仍然在简历中得到了旧数据。检查我的更新。你在日志中的顺序正确吗?
mDao
可以不在调用时写入更改吗?我发现了,它是由更新逻辑引起的,与顺序无关。谢谢。:)嗯。。。我在日志中看到不同的名称(
xxx
)。可以吗?可以,我修改了项目的真实名称。:)
08-19 03:30:00.170    5330-5330/com.kk I/System.out﹕ pro:save:xx:16
08-19 03:30:00.214    5330-5330/com.kk I/System.out﹕ pro:load:xxx:null