2011-06-10 28 views
2

我有兩項活動。在活動1中,我通過將該值輸入到EditText字段中來爲SQLite數據庫寫入值。一旦我按下提交按鈕,數據就會被寫入,並且我將被移動到另一個活動 - 活動2. Activity2也會執行相同的操作,因爲我可以使用按鈕單擊來寫入新數據並將其保存到數據庫中。所以,我的問題是:是否需要同步活動1中的方法(位於UI中的獨立線程上)以及活動2中的方法,以防止數據庫中的線程安全問題?請記住,這兩種方法都可以訪問相同的數據庫,但可以從不同的活動中訪從技術上講,活動1應該完成,onStop已被調用,新活動(活動2)現在可見。這兩個活動及其相應的線程是否有可能(通過不同的方法)訪問數據庫在Android活動生命週期中存在任何種類的併發問題?Android活動中的同步方法

非常感謝, 馬特

回答

1

檢查這種方法

SQLiteDatabase.setLockingEnabled(boolean lockingEnabled)

+0

感謝您 - 我不知道這種方法。然而,問題仍然存在 - 鑑於Android活動的生命週期,我需要它嗎? – 2011-06-10 13:15:50

+0

[The method](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#setLockingEnabled(boolean))已棄用 – JesperB 2012-09-12 10:57:41

+0

您提到自哪個版本被刪除了嗎? – 2012-09-12 18:14:29

0

你的後臺線程如何創建的?後臺線程會在活動停止後繼續運行。

如果活動2中的數據在用戶輸入一些數據之前不會持久化,那麼考慮到活動1中的數據應持續幾毫秒的事實,似乎不需要鎖定。但是,如果你正在準備最糟糕的情況,我不知道數據庫鎖怎麼會傷害任何東西(就像@Pepi建議的那樣)。我可以看到這是一個問題的唯一方法是,如果在後臺線程(活動1)中完成的工作掛在某個東西上,然後它可以提交數據。如果活動2啓動它自己的後臺工作來提交數據,那麼你可能會在這兩個後臺線程之間進行競爭。

+0

這是我的想法,更糟糕的情況似乎是唯一的警告。根據活動,我使用處理程序創建線程,或使用擴展線程的簡單內部類來創建線程。這取決於。所以我想這會讓他們保持同步,儘管在理論上它似乎不應該有99.99%的時間 - 如果有的話。而且,這些過程的持續時間相當短 - 沒有什麼重大的,所以它應該沒問題。謝謝。 – 2011-06-10 13:58:50

+0

@javamatt您應該將我們的答案標記爲「正確」,以便將此問題歸類爲回答。 – 2011-06-10 15:16:27