2011-09-20 40 views
11

Android文檔說如何創建一個線程安全的ContentProvider?

ContentProvider的方法,可以從不同的ContentResolver的調用不同的進程和線程 對象,他們必須執行的線程安全的方式

而且我發現這個職位上Stackoverflow Android - sqlite content providers and multithreading 哪些說它已經線程安全?

所以,只是想知道如何創建一個線程安全ContentProvider?它是不夠的,如果我做的插入/更新/刪除方法syncronized

public synchronized Uri insert (Uri uri, ContentValues values) { 

} 
+0

我有多個線程將數據插入到相同的數據庫/表 – kakopappa

+0

請仔細閱讀其他人寫的:[Android上的SQLite的最佳實踐是什麼?](http://stackoverflow.com/questions/2493331/什麼 - 是最最佳實踐換的sqlite-上的Android/3689883#3689883)。它應該爲你澄清事情。 – JJD

+0

是的,但如果你有多線程更新和刪除 – JPM

回答

11

你可以盡一切方法​​,但要確保它是絕對必要的,你做之前。如果底層數據源已經是線程安全的,那麼方法​​的成本可能會很高。有關此主題,請參閱我的blog post以獲取更多信息。

+1

即使你讓每個方法同步......什麼會阻止請求更新和刪除請求同時進入,從而導致線程安全。在我看來,每個這些方法在繼續之前都需要等待信號量清除。或更好,但這些方法都使用隊列... – JPM

+4

@JPM是的,你是絕對正確的。在使用'SQLiteDatabase'作爲底層源的情況下,這應該沒有關係('SQLiteDatabase'是線程安全的)。除此之外,沒有保證......你必須同步數據源或同步對ContentProvider的訪問(我會建議前者)。 –

+0

如何同步ContentProvider使用的Datasource/DataBaseHelper類?也許我應該問這個問題...似乎別人沒有在這個網站上回答。 – JPM

相關問題