我已经按照SDK中SimpleSyncAdapter示例项目的方式实现了SyncAdapter,AccountManager和private ContentProvider。一切都很好。

现在,当我从远程服务器下载了设置了特定标志的新行时,我想向用户显示一条消息。同步完成后,我需要从SyncAdapter进行回调,以便执行查询并显示 Activity 中的消息。我在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中的以下方法:

registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)

此注册一个观察者类,当给定内容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;
}

在执行registerContentObserver时使用notifyForDescendents可能非常有用。

关于Android SyncAdapter回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9268453/

10-12 03:17