我已经在SDK中的SimpleSyncAdapter示例项目中实现了SyncAdapter,AccountManager和私有ContentProvider.一切运作良好.
现在,我想在从具有特定标志集的远程服务器下载新行时向用户显示一条消息.当Sync完成时,我需要从SyncAdapter进行回调,以便我可以执行查询并显示来自活动的消息.我在StackOverflow上看到了一些关于这个问题的问题,但没有一个问题得到了很好的答案.
How does one listen for progress from Android SyncAdapter?说SyncStatusObserver没用.用户mobibob建议使用ResultReceiver从同步线程回复UI.
How to know when sync is finished?建议在SyncService中使用Intent.
How to signal sync-complete to the Android SyncManager?建议使用SyncResult.由maxpower47链接的示例代码使用SyncResult类报告异常,但不实际报告同步是否成功完成.
我只是不知道哪个是最好的选择,我还没有看到任何使用这些解决方案的示例项目.
解决方法
我知道这是一个老问题,但我自己也在问同样的事情.
我发现作为一个好的解决方案,特别是因为我正在处理本地数据,是使用ContentResolver中的以下方法:
我发现作为一个好的解决方案,特别是因为我正在处理本地数据,是使用ContentResolver中的以下方法:
registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver observer)
这会注册一个观察者类,当给定内容URI标识的数据发生更改时,该类会获得回调.但这只有在您的ContentProvider发送通知时才会发生.因此,例如,如果您希望通过ContentProvider在ContentObserver上获得有关数据库上所做的所有更新的通知,那么您的ContentProvider应该实现类似于以下的更新:
@Override public int update(Uri uri,ContentValues contentValues,String s,String[] strings) { // code goes here this.getContext().getContentResolver().notifyChange(uri,null); return 0; }
在执行registerContentObserver时使用notifyForDescendents非常有用.