2016-07-14 58 views
0

为了更好地了解RxAndroid,我发现this Repo这是充满了有用的例子使用RxAndroid,特别是与改造相结合。RxAndroid http请求在后台使用改进

所以,如果我看看this部分回购,我可以通过点击一个按钮,似乎在后台运行的权利?

如果我有这个应用程序需要显示一个活动/片段,并在同一时间做一些http调用的背景,并显示数据,如果有任何收到?

因此,例如,我有这样的片段借助onStart

@Override 
public void onStart() { 
    super.onStart(); 

    pomagistoService 
      .getAgenda() 
      .subscribeOn(Schedulers.newThread()) // <- run in background right? 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Observer<List<Appointment>>() { 
       @Override 
       public void onCompleted() { } 

       @Override 
       public void onError(Throwable e) { } 

       @Override 
       public void onNext(List<Appointment> appointments) { 
        // show data in ListView 
       } 
      }); 
} 

如果我开始这个片段将ListView瞬间包含由HTTP调用接收到的数据。

现在的问题/我想知道的是: 这个http调用是否在后台运行?

我在问这是因为当片段出现时立即出现的数据,所以我不能真正观察它。

+1

是的http调用在后台运行 –

+0

@AmitShekhar oke,所以我们假设http调用需要5秒钟,片段不会出现5秒。该片段刚刚出现(没有数据)? –

+0

你应该从onNext()更新片段列表视图() –

回答

0

通常,对于网络请求,您不应该使用Schedulers.newThread(),而应该使用Schedulers.io()。另外,为了在执行请求之前获得一些延迟,并有机会看到没有数据的片段,请尝试使用.delay(5, TimeUnit.SECONDS)在呼叫之前延迟5秒。

0

如果你使用subscribeOn(Schedulers.io())那么你告诉RxJava在后台工作(另一个线程)。 Schedulers.io()通常用于网络等I/O操作,您可以使用Schedulers.computation()进行本地运行的长时间处理操作。

并通过使用observeOn(AndroidSchedulers.mainThread())你告诉你想要在主线程中接收最终结果,以便显示它或处理UI事件。

一些常见的错误是混淆使用subscribeOn()observeOn()的时候,所以很容易让你..你总是希望观察主线程导致UI,以反映它,否则用什么适合你的情况。