않습니다 완료 됐습니까? 비록 내가 다른 스레드 (IO 스레드)를 지정하더라도이 관찰자는 여전히 가입자가 호출 한 블록을 차단합니까? 코드에 대해서는RxJava 안드로이드는 단순히 값을 기준으로 가입자의 IO 후 업데이트 파일을 관찰이 단순한 관찰자 가입자 콤보 지정된 옵저버 블록
1
A
답변
1
귀하의 Observer
당신이 당신의 Observer
(그래서, 그냥 방출됩니다 값)에 가입하기 전에 수행 할 수 귀하의 작업으로 차단하지 않습니다
(단순 자바 8 스타일) :
Observable.just(preferences.getBoolean("vibrate", false))
.subscribeOn(Schedulers.io())//observe on new thread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(shouldVibrate) -> {
if (shouldVibrate) {
Toast.makeText(context,"i should vibrate now",Toast.SHORT).show();
}
});
당신은 변수 preferences.getBoolean(C"vibrate", false)
로 전화를 추출 할 수 있습니다 :
Boolean vibrate = preferences.getBoolean("vibrate", false);
Observable.just(vibrate)
.subscribeOn(Schedulers.io())//observe on new thread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(shouldVibrate) -> {
if (shouldVibrate) {
Toast.makeText(context,"i should vibrate now",Toast.SHORT).show();
}
});
당신이 볼 수 있듯이,이전에이 계산되고 주 스레드가 차단됩니다. 당신이 당신의 Observer
를 구독 할 수 있습니다 경우에만이 코드와 Observable.create
방법
Observable.create(sub -> {
Boolean vibrate = preferences.getBoolean("vibrate", false);
sub.onNext(vibrate);
sub.onCompleted();
})
.subscribeOn(Schedulers.io())//observe on new thread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(shouldVibrate) -> {
if (shouldVibrate) {
Toast.makeText(context,"i should vibrate now",Toast.SHORT).show();
}
});
를 사용하여 메소드에 "게으른"전화를 작성해야
는 Boolean vibrate = preferences.getBoolean("vibrate", false);
가 호출됩니다. 당신은`preferences.getBoolean` 여기에 "파일 IO"로 고려하고
Observable.create(sub -> {
Boolean vibrate = preferences.getBoolean("vibrate", false);
sub.onNext(vibrate);
sub.onCompleted();
})
.filter((value) -> value)
.subscribeOn(Schedulers.io())//observe on new thread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(shouldVibrate) -> {
Toast.makeText(context,"i should vibrate now",Toast.SHORT).show();
});
(당신의 가입자에, 당신은
filter
로 변경할 수 있습니다 경우에 대한)? –나는 [이] (http://stackoverflow.com/questions/23447077/android-rxjava-non-blocking?rq=1) [질문] (http://stackoverflow.com/questions/25853696/ui-blocking)라고 생각합니다. -occurs-in-android-inde-rxjava? lq = 1) 도움이 될만한가요? –
예 디스크에 쓴 이후 파일 I/O. 그것은 실제로 제가 한 일례 일뿐입니다. – j2emanue