2014-02-23 56 views
0

我正在使用IntentService將我的SQLite數據庫(由Content Provider管理)與web服務同步。我的問題是,當用戶刷新屏幕時會觸發服務,因此可能會有更多的服務同時運行。恐怕可能會導致併發問題:例如數據損壞。防止重複服務中的併發

我的問題是:是否有一種「Android」方法來防止這種情況發生?或者我必須自己建立一個排隊系統?我知道我可以將我的整個服務代碼放在原子塊中,但我正在尋找更優雅的東西。

謝謝!

回答

4

IntentService已經爲您處理排隊系統。從documentation

的所有請求都在一個工作線程處理 - 他們可能會採取只要有必要 (並不會阻止該應用程序的主循環), 但只有一個請求,將在處理時間。

恕我直言,如果你想要一個更強大和優雅的解決方案,以你的ContentProvider與web服務同步,你應該創建一個SyncAdapter這是更爲強大(它甚至可以監視你ContentProvider並觸發Web服務調用)。

+0

謝謝。基本上我並沒有使用syncAdapter,因爲我只是拉取數據,而不是推動任何事情。 –

1

如果服務是由Intents觸發的,那麼它將遵循正常的生命週期,並且回調將會在應用程序進程的主UI線程上觸發。該服務不會重新生成多個實例。如果你在服務中產生了自己的後臺線程或AsyncTask來爲你做一些繁重的工作(即處理你的數據),那麼你需要相應地保護事物。