Aşağıdaki kodu var:RxJava: gözlemlenebilir ve varsayılan iplik
map: thread=background-thread-1
onNext: thread=background-thread-1, value=map-1
onComplete: thread=background-thread-1
Önemli detay: Ben başka bir iş parçacığı subscribe
yöntemini arıyorum (main
iplik burada
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull final ObservableEmitter<String> s) throws Exception {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
s.onNext("1");
s.onComplete();
}
});
thread.setName("background-thread-1");
thread.start();
}
}).map(new Function<String, String>() {
@Override
public String apply(@NonNull String s) throws Exception {
String threadName = Thread.currentThread().getName();
logger.logDebug("map: thread=" + threadName);
return "map-" + s;
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(String s) {
String threadName = Thread.currentThread().getName();
logger.logDebug("onNext: thread=" + threadName + ", value=" + s);
}
@Override
public void onError(Throwable e) {}
@Override
public void onComplete() {
String threadName = Thread.currentThread().getName();
logger.logDebug("onComplete: thread=" + threadName);
}
});
Ve çıkış var Android'de). Observable
sınıf senkron ve varsayılan olarak ve doğru, (s.onNext
) olayları yayar aynı iş parçacığı üzerinde her şey (map
gibi operatörler + bildiren abonelerine) gerçekleştirir gibi
Yani görünüyor? Acaba ... amaçlanan davranış mı yoksa sadece bir şeyi yanlış anlamış mıyım? Aslında, en az onNext
ve onComplete
geri aramalarının, bir yayıcı olayda değil, arayanın iş parçacığı üzerinde çağrılacağını beklerdim. Bu özel durumda gerçek arayanın iş parçasının önemli olmadığını doğru anlıyor muyum? En azından, zaman uyumsuz olarak olaylar oluşturulduğunda.
Başka bir endişe - eğer bazı harici kaynaklardan bir parametre olarak Gözlemlenebilir (yani kendi başıma üretemiyorum) alsam ne olur? ... benim için kullanıcı olup olmadığını kontrol etmenin bir yolu yoktur. Senkronize veya senkronize olmayan ve sadece subscribeOn
ve observeOn
yöntemleri ile geri arama almak istediğimi açıkça belirtmem gerekiyor, değil mi?
Teşekkürler!