考虑以下情况:我有一个“服务(Service)”,它在“AsyncTask”中写入数据库。我的活动(Activity)从数据库中读取数据(考虑UI线程以简化问题)。我使用“SQLiteOpenHelper”访问数据库。我在Application onCreate()中创建单个实例,然后在服务和活动中获取它。是否有可能出现数据库“死锁(dead locked)”的情况?以前,我使用ContentProvider进行此类操作。尽管它基于使用单个“SQLiteOpenHelper”实例,但我决定通过排除“ContentProvider”来简化我的项目。
考虑代码:
考虑代码:
public class App extends Application {
private OpenHelper openHelper;
@Override
public void onCreate(){
super.onCreate();
openHelper=new OpenHelper();
}
public OpenHelper getHelper(){
return openHelper;
}
}
在Activity中:
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getReadableDatabase();
// Do reading
在Service内部,开启一个独立的线程:
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getWritableDatabase();
//Do writing
这个功能是否安全?
更新 这里 可能是解决方案,但不确定如何使用。