2015-09-28 28 views
5

Projemde farklı iş parçacıklarındaki nesneleri işlemem gerekiyor.Vidaları işlemek için etkili bir yol RxJava

apiService.getObjects(token) // Retrofit 
       .compose(bindToLifecycle()) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .doOnNext(o -> { 
        // process in Main Thread 
       }) 
       .map(Observable::just) // create new one, to change thread for it 
       .observeOn(Schedulers.io()) 
       .subscribe(o -> { 
        // process in the background thread 
       }); 

Ama RxJava içinde farklı evrelerde tek yanıtı işlemek için güzel ve verimli bir şekilde çok daha fazla olduğunu düşünüyorum: streamin davranışını işlemek için onların observeOn() bu şekilde değiştirmek için yeni gözlenebilirleri oluşturun. Onu google denedim, ama hiçbir şey bulamadım.

sayesinde Rx ise
Anton

cevap

3

, genellikle (dere üzerinde abone alırsa sadece yürütülecektir) 'do' bloklarda yan etkilerinden kaçınmak için tavsiye ve kod abone tercih ediyor. Senin durumunda

Eğer cache() veya publish()...connect(), kaldıraç ör:

yerine cache() ait publish() ile
query = apiService.getObjects(token) 
      .compose(bindToLifecycle()) 
      .subscribeOn(Schedulers.io()) 
      .cache(); 

query.observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(o -> { 
       // process in Main Thread 
      }) 
query.observeOn(Schedulers.io()) 
      .subscribe(o -> { 
       // process in the background thread 
      }); 

, kod aynıdır ancak sorgu ateş ederken (akışı bağlayan sizi karar verebilir 2 aboneliği kabloladıktan sonra query.connect() numaralı telefonu arayın.

Abonelik işiniz arka plan hesaplamasıysa, Schedulers.computation(), Schedulers.io() üzerinden tercih edilebilir. kodunuzu 'observeOn' ifadeleri sadece daha aşağı akışı etkileyebilir olarak, map(Observable::just) hattı olmadan da gayet iyi çalışır AFAICT

Not (değil önceki 'do' ifadeleri)

+0

nasıl hesaplama çalışır? Ve yayınlamayı açıklayabilir misiniz -> bağlan? –

+0

Bu 2 soruyu yanıtlamak için cevabı güncelledim – Gluck

İlgili konular