我已经按照 SDK 中的 SimpleSyncAdapter 示例项目的思路实现了 SyncAdapter、AccountManager 和私有 ContentProvider。一切都运转良好。
现在,当从远程服务器下载了设置了特定标志的新行时,我想向用户显示一条消息。当同步完成时,我需要来自 SyncAdapter 的回调,以便我可以执行查询并显示来自活动的消息。我在 StackOverflow 上看到了一些讨论这个问题的问题,但没有一个给出好的答案。
如何从 Android SyncAdapter 监听进度? https://stackoverflow.com/questions/5268536/how-does-one-listen-for-progress-from-android-syncadapter说SyncStatusObserver没有用。用户 mobibob 建议使用 ResultReceiver 从同步线程响应 UI。
如何知道同步何时完成? https://stackoverflow.com/questions/6622316/how-to-know-when-sync-is-finished建议在 SyncService 中使用 Intent。
如何向 Android SyncManager 发出同步完成信号? https://stackoverflow.com/questions/5785482/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;
}
在注册ContentObserver 时使用notifyForDescendents 会非常有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)