Android:在SQLite数据库上编写多个线程

Ant*_*res 5 sqlite multithreading android

onCreate()我的主要活动的方法中,我调用我的dbManager的构造函数,我调用open函数创建一个a的实例,SQLiteOpenHelper而不是我调用getWritableDatabase()它.在UIThread中,我将记录添加到数据库并将这些记录保存到ArrayList.另外两个线程检查ArrayList做什么,然后更新列表和数据库.现在我想在UI中添加一个按钮来删除数据库和列表记录AsyncTask.我已经读过该SqliteOpenHelper对象保存在一个数据库连接上.因此,如果有一个帮助程序实例,则只有一个数据库连接.此连接可以在多个线程中使用,SqliteDatabase对象使用java锁来保持访问序列化.那么如果我在数据库上写了多个线程,那么一个线程会等到前一个线程完成其操作?
添加新功能(全部删除)可能会产生问题,因为我必须避免两个线程中的一个尝试编辑不再存在的记录.我怎样才能实现目标?谢谢.

Ami*_*val 4

数据库:

只要您只使用一个助手,您就是线程安全的,无需执行任何操作。
在多线程应用程序中,您synchronized只需要创建助手。如果你想定义一个临界区(多个原子操作),你可以使用transacion 。用和
包装每个调用:getWritableDatabase()close(false)

public void doSomething() {
    SQLiteDatabase tdb = getWritableDatabase();
    dbInstance.writeSomething(tdb, 1);
    close(false);
}
Run Code Online (Sandbox Code Playgroud)

这样我就有多个线程读取和写入数据库没有任何问题。

您的应用程序逻辑:

使用内存来跟踪对象状态,并仅使用数据库作为存储。因此,如果一个线程从数据库中删除行,您可以立即更新内存中的对象,并相应地处理您的用户界面。
如果你的数据非常大,那么你只能在内存中保留SparseArray脏行id。
在这里同步一些操作可能很有用。