我有一個從AsyncTasks中的Internet下載數據的服務。它解析數據並將其存儲在數據庫中。該服務持續運行。來自Android中不同線程的數據庫訪問
在服務寫入數據庫時,活動嘗試從數據庫中讀取數據。
我有一個數據庫幫手,有幾種寫作和閱讀方法。這會導致問題嗎?可能試圖從兩個不同的線程打開數據庫?
我有一個從AsyncTasks中的Internet下載數據的服務。它解析數據並將其存儲在數據庫中。該服務持續運行。來自Android中不同線程的數據庫訪問
在服務寫入數據庫時,活動嘗試從數據庫中讀取數據。
我有一個數據庫幫手,有幾種寫作和閱讀方法。這會導致問題嗎?可能試圖從兩個不同的線程打開數據庫?
在db中已經討論過很多關於併發問題的書籍。
但使用計算器像維基百科我已經發現了一些有趣thing:
Android上的SQLite的,您可以從多個特效訪問數據庫 讀取,但如果你現在從一個進程寫,讀而 寫入其他特效會拋出異常,因爲寫入的第一個 對db有鎖定。
然後數據庫被很好的保護免受其他線程。 壞消息是,你必須管理那些例外,並且如果你有一個大的數據庫(這意味着有很多數據交換的表很多)
只要你只使用一個實例SQLiteDatabase
,你應該沒問題。只要確保只在數據庫幫助程序中執行數據庫讀取/寫入事務,而不能使用其他類。任何使用相同數據庫對象進行的事務將自動同步。
謝謝!我猜不一定是個大問題。如果服務擁有一個db-helper的實例並且另一個活動。那麼我只需要在db-helper的每個方法中嘗試/捕獲?! – johan