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