请考虑以下内容:我有Service
,它在AsyncTask
中写入数据库。我的Activity从数据库读取数据(为简单起见,考虑UI线程)。我使用SQLiteOpenHelper
访问数据库。我在Application onCreate()中创建单个实例,然后在服务和活动中获取它。有没有可能让我的数据库'死锁'?以前,我使用ContentProvider进行这些操作。虽然它基于使用单个的SQLiteOpenHelper
实例,但我决定通过排除ContentProvider
来简化我的项目。从多个线程访问的SQLite数据库
考虑代码:
public class App extends Application {
private OpenHelper openHelper;
@Override
public void onCreate(){
super.onCreate();
openHelper=new OpenHelper();
}
public OpenHelper getHelper(){
return openHelper;
}
}
在活动时间:
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getReadableDatabase();
// Do reading
而且里面的贡献莫过于,在单独的线程:
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getWritableDatabase();
//Do writing
难道是安全的?
UPDThis可能是解决方案,但不知道如何使用它。
beginTransactionNonExclusive()给我错误,它为上面的api11。但我的应用程序min api是10.任何其他方式使用sqlite与IMMEDIATE模式? – 2013-10-02 13:29:52