2012-10-07 78 views
3

我已經使用Android sample project,Steele的兩部分教程(12)和Google I/O 2010談話在REST應用程序中設置了SyncAdapter。Android SyncAdapter服務:在onPerformSync結束後保持活動狀態?

看起來像AbstractThreadedSyncAdapter在onPerformSync完成後立即在SyncAdapter服務上立即調用onDestroy。我想從SyncAdapter服務中分離出其他線程,我想知道是否可以保持SyncAdapter服務處於活動狀態,直到這些線程完成 - 例如,將這些異步工作線程的回調註冊回SyncAdapter服務。

是否有可能做到這一點,而不會殺死onPerformSync後的服務?或者您是否必須將所有同步方法放入SyncAdapter onPerformSync方法中的同一個線程中?

回答

4

我很確定答案是「不」......但即使有可能,爲什麼要這麼做呢? SyncAdapter已在後臺線程中完成其工作......因此,爲什麼您必須在SyncAdapter服務中啓動單獨的工作線程才能執行同步?

我想如果您嘗試註冊回調和/或弄亂SyncAdapter的生命週期來實現這一點,情況就會變得混亂。 Android的同步服務負責爲任何數量的應用(例如GMail,Google Drive等)安排/執行同步操作,因此當onPerformSync完成時,這是一種告訴Android完成工作並且應該集中精力的方式在下一個應用程序中,它必須同步。

+0

我的同步時間很長,我想要一個進度條。目前,我正在將舊的AsyncTask與onProgressUpdate所有設置移動到新的SyncAdapter,並希望複製相同的用戶界面。讓服務執行AsyncTask可以正常工作。並想知道是否可以通過從服務中產生相同的AsyncTask來使用相同的onProgressUpdate,就像其他服務一樣。否則,我會做一個完整的重寫。 – abloc

+0

「...所以當onPerformSync完成時,這是一種告訴Android的工作完成的方式,它應該專注於它必須同步的下一個應用程序。」 Android爲什麼不能/不應該通過並行來完成這個設計原因是什麼? PS我試圖同步到一個Azure移動服務,它只公開了一個異步回調體系結構,所以我想基於這裏所說的,我將把它們包裝在某種等待塊中。但這是你爲什麼想要做OP建議的誘惑。 – Merk

+0

@ alex-lockwood如果在onPerformSync方法中出現問題,有什麼方法可以實現故障切換。就像我們進行網絡通信一樣,並且在連接期間超時。那麼同步如何處理這個問題或我們如何處理這種情況? – Scorpion

相關問題