Android系統提供Sync Adapter功能用於移動端App與服務器端進行數據同步。在Android開發者官網上有一個簡要的教程。在學習過程中也參考了Google自家的sample code和這一片出自Udi Cohen的非常出色的博客。在自己嘗試過程中,對Sync Adapter的實現遇到了一些問題,學習到一些經驗知識,這裏做一總結。
Stub
最開始學Android官方教程時,對“Stub"這個詞理解非常模糊,後來發現,所謂Stub Authenticator和Stub Content Provider,意思就是臨時設計的一個滿足了基本接口但是沒有任何實際功能的類,用來輔助對Sync Adapter的說明。在復現Android教程上的過程時,對於Stub Authenticator和Stub Content Provider的實現,一定要注意各個接口函數的返回值,返回值一定要是對Sync Adapter有意義的值,特殊注意的是StubProvider類的onCreate()函數,一定要返回true。
Content Provider相關的設置
爲了正確使用Sync Adapter,有關於Content Provider的設置一定要注意,必須使以下幾個位置的設置完全一致才能確保Sync Adapter的成功:
(1)Manifest文件中<provider>元素內android:authorities屬性;
(2)Sync Adapter對應的service的resource file中<sync-adapter>元素的android:contentAuthority屬性;
(3)若使用ContentResolver.requestSync()函數進行調試,requestSync()函數的第二個參數。
以上幾個位置的值必須完全一致。
Service的設置
在目前Android官方的教程上,對Manifest文件裏對應於Sync Adapter的<service>元素提出,android:process屬性可配置爲:sync。經實際調試發現手工的requestSync()並不能正常執行。對比Google自家的sample code發現,android:process屬性都沒有顯式設置。於是去掉該屬性,之後發現手工requestSync()函數正確執行。