請考慮以下內容:我有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