我正在尝试在 Android 上多线程使用一个 sqlite 数据库。 我有以下情况:
Activity A:它有 10 个使用 DB 的线程,但仅使用一个 SQLiteDatabase
Activity B:有 10 个使用 DB 的线程,但仅使用一个 SQLiteDatabase
(Activity的两个SQLiteDatabase对象不同)
逻辑执行如下:
- A 调用 B
- B 插入数据库并返回给 A
- A 显示结果
- A 尝试删除 B 插入的内容,但失败了。
A可以删除旧的东西,但是B刚刚插入的新对象失败,如果我重新启动应用程序,A可以删除以前不能删除的对象。 我应该为两个 Activity 使用相同的 SQLiteDatabase 吗?如果是这种情况,如何将此对象传递给 Activity B?
Activity A线程代码:
私有(private)类Delete_Task扩展了AsyncTask{
private Context mContext;
private DatabaseManager mDB;
public DeleteEvent_Task(Context mContext,DatabaseManager DB) {
this.mContext = mContext;
this.mDB = DB;
}
@Override
protected Void doInBackground(Long... params) {
long id = params[0];
this.mDB.delete(id);
return null;
}
}
Activity B线程代码:
私有(private)类 Update_Task 扩展 AsyncTask
private Context mContext;
public Update_Task(Context mContext)
{
this.mContext = mContext;
}
@Override
protected Void doInBackground(Event... params) {
Object e = params[0];
DatabaseManager DB = new DatabaseManager(this.mContext);
if (e.getId() <= 0)
{
DB.add(e);
}
else
{
DB.update(e.getId(), e);
}
DB.close();
return null;
}
}
最佳答案
到目前为止,最简单的事情是在应用程序启动时打开一次数据库连接,并在整个代码中共享此连接,而无需关闭它。如果您使用单个连接,所有读取和写入都将被正确序列化,因此您无需担心。
关于android - Android 上的数据库多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333644/