ole*_*leh 9 android synchronization
我想重用我的SyncAdapter用于多个权限.Method
onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult)将权限作为参数传递.但是我怎么能这样注册呢?
我开始在AndroidManifest.xml中跟随:
<service
android:name=".sync.SyncService" >
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data
android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter1" />
</service>
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方式注册@xml/syncadapter2但没有成功.没有为每个权限派生SyncAdapter类的任何想法?
小智 9
这个问题是几个月前提出的,但无论如何我想回答......
onPerformSync()在新的SyncThread被启动以执行同步操作时调用.每个SyncAdapter都会旋转一个绑定到其中定义的权限的SyncThread sync-adapter.xml,并且无法在此xml文件中定义多个权限.
AbstractThreadedSyncAdapter(SyncAdapter超类)根本不是为了处理多个权限而编写的.它包含一个ISyncAdapterImpl作为Singleton实现的final 类,因此每次startSync()调用时,都会使用相同的权限进行同步.
或者,您最初是否尝试@xml/syncadapter2在SyncService中添加其他元数据?这相当于将多个SyncAdapter注册到单个SyncService.它在技术上是可行的(因为您可以在服务标签中定义多个元数据标签)但是操作系统本身是在service.onBind(Intent intent)运行同步时调用服务的罪魁祸首,并且您无法轻松控制它传递的意图.如果你可以控制它,你可以在intent的包中放一个键来决定你要绑定哪个注册的syncAdapter.即使这似乎很难.
总而言之,为每个权限(也使用自己的服务)实现不同的SyncAdapter,并将类似的操作抽象到一个被调用的Utility类中将会更少onPerformSync().从长远来看,这种策略更易于维护,因为如果需要删除其中一个ContentProviders,则删除相应的SyncAdapter和SyncService会更容易.
| 归档时间: |
|
| 查看次数: |
3219 次 |
| 最近记录: |