gpt4 book ai didi

android - Android 上的数据库多线程

转载 作者:搜寻专家 更新时间:2023-11-01 07:37:46 28 4
gpt4 key购买 nike

我正在尝试在 Android 上多线程使用一个 sqlite 数据库。我有以下情况:

Activity A:它有 10 个使用 DB 的线程,但只使用一个 SQLiteDatabase

Activity B:有 10 个使用 DB 的线程,但只使用一个 SQLiteDatabase

(Activity的两个SQLiteDatabase对象不同)

逻辑执行如下:

  1. A 调用 B
  2. B插入数据库返回给A
  3. 显示结果
  4. A 尝试删除 B 插入的内容但失败了。

A 可以删除旧的东西,但是 B 刚插入的新对象失败了,如果我重新启动应用程序,A 可以删除以前不能删除的对象。我应该为两个 Activity 使用相同的 SQLiteDatabase 吗?如果是这种情况,如何将此对象传递给 Activity B?

Activity线程代码:

私有(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< Object, Void, Void > {

    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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com