2012-03-12 120 views
3

我已經設置了一個應用程序來執行與Android同步框架的同步。大部分內部工作都來自同步適配器演示。我有一個非常簡單的問題,什麼時候該應用程序同步?我知道Google服務會在收到網絡「癢癢」時同步,您設置的同步服務也是如此。Android應用程序同步計劃

回答

5

由於Amorgos提到您提到的那些發癢是C2DM推送消息。如果在雲中製作後立即同步更改非常重要,則應考慮實施它們。你可以去here瞭解更多信息。

用於請求同步操作,你必須看看類是ContentResolver。如果你想同步呼叫requestSync(帳戶帳戶,字符串權限,捆綁額外)(用於同步按鈕或​​類似的)。要同步您的ContentProvider的變化可以在創建/更改條目(不應該同步虛假和不同步更換真正的變化將觸發)後調用

getContentResolver().notifyChange(CONTENT_URI, null, true); 

。如果您的SyncAdapter的xml文件中的android:supportsUploading設置爲true,則會自動觸發同步。在這種情況下,SyncAdapter中的Bundle包含一個布爾值,其中包含密鑰ContentResolver .SYNC_EXTRAS_UPLOAD,該值爲true。您可以使用它將本地更改同步到雲中,而不是查詢任何內容。

如果你只想同步每一個時間段使用addPeriodicSync(客戶賬戶,串權威,捆綁臨時演員,長pollFrequency)

您也可以使用ContentResolver讀取/設置它是否應該同步(在設備設置中顯示在帳戶&同步處的值)。該方法是getIsSyncable(...)setIsSyncable(...)

我希望這可以幫助你。

編輯: 這也說明了過程真的好:Why does ContentResolver.requestSync not trigger a sync?

1

這一切都取決於您的應用程序的要求。如果您正在同步數據,而這些數據對於用戶直接知道的並不重要,那麼啓動同步的操作系統就足夠了。 (聯繫人列表是一個很好的例子)

如果你的應用程序依賴於更實時的方式被通知,那麼你應該考慮使用C2DM推送通知以啓動同步過程。當服務器修改數據並將其發送到您的設備時,您可以提出C2DM消息。然後,該應用程序將根據此消息的內容運行您的同步過程。 (C2DM是你提到的Gmail例如網絡撓癢癢)

它是由你來構建應用程序,以決定何時有效地發起同步使用你決定的任何方式。所有應用程序都有不同的同步要求。