2011-10-04 31 views
3

我有一個從AsyncTasks中的Internet下載數據的服務。它解析數據並將其存儲在數據庫中。該服務持續運行。來自Android中不同線程的數據庫訪問

在服務寫入數據庫時​​,活動嘗試從數據庫中讀取數據。

我有一個數據庫幫手,有幾種寫作和閱讀方法。這會導致問題嗎?可能試圖從兩個不同的線程打開數據庫?

回答

2

在db中已經討論過很多關於併發問題的書籍。

但使用計算器像維基百科我已經發現了一些有趣thing

Android上的SQLite的,您可以從多個特效訪問數據庫 讀取,但如果你現在從一個進程寫,讀而 寫入其他特效會拋出異常,因爲寫入的第一個 對db有鎖定。

然後數據庫被很好的保護免受其他線程壞消息是,你必須管理那些例外,並且如果你有一個大的數據庫(這意味着有很多數據交換的表很多)

+0

謝謝!我猜不一定是個大問題。如果服務擁有一個db-helper的實例並且另一個活動。那麼我只需要在db-helper的每個方法中嘗試/捕獲?! – johan

2

只要你只使用一個實例SQLiteDatabase,你應該沒問題。只要確保只在數據庫幫助程序中執行數據庫讀取/寫入事務,而不能使用其他類。任何使用相同數據庫對象進行的事務將自動同步。