sor*_*ist 1 java multithreading android android-asynctask
如果他们只对它执行查询?就像是:
private SQLiteDatabase db;
@Override
public void onCreate(Bundle savedInstanceState) {
db = getWritableDatabse();
}
private Task1 extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
db.query(doSomething);
...
}
}
private Task2 extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
db.query(doSomething);
...
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序中的所有线程都应使用相同的数据库对象 - 即使同时读写也是如此.SQLite适当地使用内部锁定机制来处理它.
什么,你不希望做的是使用多个数据库对象阅读并从数据库中写入.这可能会导致数据不一致.
看这里:
最后一个链接很好.引用凯文加利根:
- Sqlite负责文件级锁定.很多线程都可以读,有人可以写.锁可防止多次写入.
- Android在SQLiteDatabase中实现了一些java锁定,以帮助保持正确.
- 如果你发疯并从许多线程中锤击数据库,你的数据库将(或应该)不会被破坏.
这是缺少的.如果您尝试同时从实际的不同连接写入数据库,则会失败.它不会等到第一个完成然后写.它根本不会写你的改变.更糟的是,如果你不叫插入/更新的正确版本的SQLiteDatabase,你不会得到一个例外.您只需在LogCat中收到一条消息即可.
顺便说一下,Kevin已经完成了ORMLite的Android方面的一些工作,这是我支持Android的Java ORM包.