Android SyncAdapter回调

Jos*_*phL 8 android synchronization callback android-syncadapter

我已经在SDK中的SimpleSyncAdapter示例项目中实现了SyncAdapter,AccountManager和私有ContentProvider.一切运作良好.

现在,我想在从具有特定标志集的远程服务器下载新行时向用户显示一条消息.当Sync完成时,我需要来自SyncAdapter的回调,因此我可以执行查询并显示来自活动的消息.我在StackOverflow上看到了一些关于这个问题的问题,但没有一个问题得到了很好的答案.

如何从Android SyncAdapter收听进度?说SyncStatusObserver没用.用户mobibob建议使用ResultReceiver从同步线程回复UI.

如何知道同步完成的时间?建议在SyncService中使用Intent.

如何向Android SyncManager发送sync-complete信号?建议使用SyncResult.由maxpower47链接的示例代码使用SyncResult类报告异常,但不实际报告同步是否成功完成.

我只是不知道哪个是最好的选择,我还没有看到任何使用这些解决方案的示例项目.

小智 2

我知道这是一个老问题,但我自己也在问同样的事情。我发现一个很好的解决方案,特别是因为我正在像您一样处理本地数据,是使用 ContentResolver 中的以下方法:

registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)
Run Code Online (Sandbox Code Playgroud)

这会注册一个观察者类,当给定内容 URI 标识的数据发生更改时,该类会获得回调。但这只有在您的 ContentProvider 发送通知时才会发生。例如,如果您想在上面的 ContentObserver 上收到通过 ContentProvider 对数据库完成的所有更新的通知,您的 ContentProvider 应实现与此类似的更新:

@Override
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
    // code goes here
    this.getContext().getContentResolver().notifyChange(uri, null);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在注册ContentObserver 时使用notifyForDescendents 会非常有用。