如何从Android SyncAdapter中监听进度?

如何从Android SyncAdapter中监听进度?,android,listener,android-syncadapter,Android,Listener,Android Syncadapter,我记得从同步适配器或同步进度事件的某些ResultReceiver上读到有关广播接收器接口的内容。SyncAdapter模式中是否内置了某种功能,还是自行开发的?什么功能有效: 2010年Google IO会话中建议的方法是将列作为标记放入ContentProvider,以指示正在获取或放置记录等。这允许在UI中放置每行微调器(或其他可视更改)。您可以通过驱动ListView的自定义游标适配器来实现这一点。ContentProvider处于钩子上,可以根据需要更改标志 没有什么: 您还可以使用-

我记得从同步适配器或同步进度事件的某些ResultReceiver上读到有关广播接收器接口的内容。SyncAdapter模式中是否内置了某种功能,还是自行开发的?

什么功能有效:

2010年Google IO会话中建议的方法是将列作为标记放入ContentProvider,以指示正在获取或放置记录等。这允许在UI中放置每行微调器(或其他可视更改)。您可以通过驱动ListView的自定义游标适配器来实现这一点。ContentProvider处于钩子上,可以根据需要更改标志

没有什么:


您还可以使用--这是非常无用的,因为它响应状态的每一次更改,而不仅仅是您的特定帐户/内容权限对,并且除了发生更改之外,实际上不会告诉您任何其他信息。因此,您无法区分正在同步的内容,也无法区分“同步事件的开始”和“同步事件的结束”。一文不值P

我刚刚从同步适配器实现了一个广播接收器,它的工作原理就像时钟一样

使用接收方集作为内部类,并在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  
    }
   }
 }

对于这种情况,您不需要将接收方添加到清单文件中。按原样使用

我使用了一种pub-sub方法,使用ResultReceiver从同步线程返回UI。该服务在同步线程运行时添加和删除订阅者,如果有订阅者可用,则向活动的接收者广播。我正在考虑使用SyncStatusObserver触发定期同步所触发的UI——我会将其代理为“开始同步”订阅status-event.Mail这很有趣,可能非常准确,但问题是关于监听(监视)进度。问题是我的同步适配器一直在运行,看不到尽头,所以我想向UI提供进度。我已经使用它通过活动更新UI上的进度。由于我没有对同步适配器计时,所以使用了不确定的进度。我会看看你的同步代码,看看你如何使用它,而不让它成为一个连续的、不间断的过程,例如,在一个线程组或执行器服务中使用多个线程。如果你正在寻找一种方法来操作SyncAdapter的开始和结束,这是最好的答案。提供用户进度信息的一个简单扩展是添加另一个额外的广播
intent.putExtra(同步状态、进度、项目、处理过程)。然后,当活动看到
SYNC\u START
时,显示中间进度微调器。当“活动”看到“同步\状态\进度”
显示进度条时。虽然这适用于大多数情况,但它不会处理在SyncAdapter已运行时启动“活动”的情况。您将不会收到初始广播。(如果您正在考虑在SyncAdapter端创建一个接收器来响应状态请求,那么问题在于它与适配器本身在同一线程中运行,并且不会及时响应。)我已经使用它通过活动更新了UI上的进度。由于我没有对同步适配器计时,所以使用了不确定的进度。我会看看你的同步代码,看看你如何使用它,而不让它成为一个连续的、不停止的过程,例如,在一个线程组或执行器服务中使用多个线程。您还可以每隔几秒/分钟向接收器发送额外的参数,例如
code
intent.putExtra(同步状态时间,30)<代码>代码