2011-03-11 65 views
6

我记得从同步适配器或同步进度事件的某个ResultReceiver读取有关广播接收器接口的信息。 SyncAdapter模式中是否有内置内容,还是内置了?如何从Android SyncAdapter监听进度?

+0

我已经使用它来通过活动更新UI上的进度。由于我没有使用同步适配器,因此我使用了不确定的进度。我会查看你的同步代码,看看你如何使用它,而不是一个连续的非停止过程,例如使用线程组或Executor服务中的多个线程。您也可以每隔几秒钟/分钟向接收器发送额外的参数,例如'code' intent.putExtra(SYNCING_STATUS_TIME,30); 'code' – 2014-04-23 11:46:33

回答

5

什么工作:

的方法,2010年谷歌的IO会议建议,Developing Android REST client applications是将列到你的ContentProvider作为标记来指示记录被取出或放入或等这使得每行微调(或其他视觉变化)将放置在您的用户界面中。您可以通过驱动ListView的自定义CursorAdapter来实现。您的ContentProvider正在挂钩,以便根据需要更改标志。

什么不:

你也可以使用一个SyncStatusObserver - 这是几乎无用的,因为它响应状态的每一个变化,不只是你的特定帐户/ contentauthority对了,真不知道除了变化发生之外,你什么都不是。因此,您无法分辨正在同步的内容,并且无法将“同步事件开始”与“同步事件结束”区分开来。一文不值。 :P

+1

我去了pub-sub方法,我使用ResultReceiver从同步线程回应UI。该服务在同步线程正在运行时添加和删除订阅者,并且如果有可用的话,它将广播给活动的接收者。我正在考虑使用SyncStatusObserver来触发UI的周期性同步已触发 - 我会将其代入“开始 - 同步”订阅状态事件。 – mobibob 2011-03-15 18:21:19

11

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

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

对于这种情况,你不需要添加您的接收器到清单文件。按原样使用!

+0

邮件这很有趣,可能非常准确,但问题是关于监听(监听)的进度。问题在于我的同步适配器正在运行并且正在运行,看不到任何结果,所以我想向UI提供进度。 – mobibob 2014-04-19 23:11:04

+0

我已经使用它来通过活动更新UI上的进度。由于我没有使用同步适配器,因此我使用了不确定的进度。我会看看你的同步代码,看看你如何使用它,而不是一个连续的非停止过程,例如使用线程组中的多个线程或Executor服务 – 2014-04-23 11:40:15

+0

如果你正在寻找一种方法,这是最好的答案来操纵SyncAdapter的开始和结束。 – MurifoX 2014-12-02 16:54:42