2013-06-05 71 views
1

我的應用程序保持從ContentResolver的和SQLiteDatabase數據庫查詢運行一些非常複雜的查詢中使用聯接和Android的ContentResolver的是不具備處理其他事情。其中一些查詢,插入等可以阻止UI線程,所以我在後臺運行它們。正如你可能猜到的,當兩個sql請求的時間相互一致時,這可能會導致SQLiteException(數據庫被鎖定)(最常見的原因是數據在用戶請求查看時從後臺從我們的服務器加載到我的數據庫中數據來自屏幕上的數據庫)。阻塞對方

來解決這個問題的最好方法是保持所有的數據庫活動的一個線程,但像我上面一些特別插頁說會導致一些大的時候UI線程阻塞,所以這不是真正的現實。我見過的另一個選項是同步ContentResolver的所有方法(它們都應該共享一個像DatabaseHelper一樣的通用成員變量)。我已經這樣做了,但是這還不夠,因爲對於某些方法,我必須使用SQLiteDatabase對象的rawQuery()方法來獲取我需要的數據。

是任何人都知道一個策略,我可以用這兩種方法ContentResolver的和SQLiteDatabase方法實現同步的?非常感謝!

回答

0

我會做長刀片在交易

db.beginTransaction(); 
    try { 

     db.setTransactionSuccessful(); 
    } finally { 
     db.endTransaction(); 
    } 

如果你不想做,如果用戶在插入過程中使得請求返回空的內容,實施重試的邏輯。

這是不是工作?