我记得读过同步适配器的广播接收器接口或同步进度事件的一些ResultReceiver。 SyncAdapter模式中是否内置了一些东西,还是本土的?
答案 0 :(得分:11)
我刚刚从同步适配器实现了广播接收器,它就像发条一样!
使用Receiver set作为内部类并在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
}
}
}
对于此方案,您无需将接收器添加到清单文件中。只是按原样使用!
答案 1 :(得分:5)
什么有效:
2010年Google IO会话中建议的方法Developing Android REST client applications是将列放入ContentProvider中作为标记,以指示正在提取或放置记录等。这允许每行微调器(或其他)视觉变化)放在你的UI中。您可以通过驱动ListView的自定义CursorAdapter来实现。您的ContentProvider可以根据需要更改标志。
什么不是:
您还可以使用SyncStatusObserver - 这几乎无用,因为它会响应每次状态更改,而不仅仅是您的特定帐户/内容授权对,而且实际上并没有告诉您任何其他内容而不是发生了变化。因此,您无法分辨正在同步的内容,并且您无法区分“同步事件的开始”和“同步事件结束”。一文不值。 :P