我记得从同步适配器或同步进度事件的一些 ResultReceiver 中阅读了有关广播接收器接口的信息。SyncAdapter 模式中是否内置了一些东西,或者它是自产的?
2 回答
我刚刚从一个同步适配器实现了一个广播接收器,它就像发条一样工作!
将 Receiver 设置为内部类并在 onCreate 中调用 registerReceiver 并在 onDestroy 中调用 unregisterReceiver 为我做了这个。
由于我有一种策略方法来生成和查询多个线程,因此在 SyncAdapter 运行开始时我所拥有的只是:
Intent intent = new Intent();
intent.setAction(ACTION);
intent.putExtra(SYNCING_STATUS, RUNNING);
context.sendBroadcast(intent);
在同步运行结束时,我有:
intent.putExtra(SYNCING_STATUS, STOPPING);
context.sendBroadcast(intent);
在我的活动中,我声明:
onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
SyncReceiver myReceiver = new SyncReceiver();
RegisterReceiver(myReceiver,ACTION);
}
onDestroy(){
super.onPause();
unRegisterReceiver(myReceiver);
}
public class SyncReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
//do something
}
}
}
对于这种情况,您不需要将接收器添加到清单文件中。照原样使用!
什么有效:
在 2010 年 Google IO 会话中建议的方法,开发 Android REST 客户端应用程序是将列作为标签放置到您的 ContentProvider 中,以指示正在获取或放置记录等。这允许每行微调器(或其他视觉更改)放置在您的 UI 中。您可以通过驱动 ListView 的自定义 CursorAdapter 来做到这一点。您的 ContentProvider 可以根据需要更改标志。
什么不:
您还可以使用SyncStatusObserver - 这几乎没有用,因为它响应状态的每一次更改,而不仅仅是您的特定帐户/内容授权对,并且除了发生更改之外,实际上并没有告诉您太多任何事情。因此,您无法分辨正在同步的内容,也无法区分“同步事件开始”和“同步事件结束”。一文不值。:P