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()函数正确执行。