2016-07-14 24 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,以反映它,否則用什麼適合你的情況。