В приведенном ниже коде я создал пример для изучения функционального программирования с использованием Rx.Я пытаюсь обработать HandlerThread
как наблюдаемый.В onResume()
я подписываюсь на Single.just
, наблюдаемый для запуска HandlerThread
.
Для SingleObserver
обратных вызовов, несмотря на получение значений в onSuccess()
, объект Disposable
в onSubscribe()
всегда null
.
Я также разместил logcat.Пожалуйста, посмотрите на это, и, пожалуйста, дайте мне знать, почему Disposable
объект d
является null
.
код :
onResume() {
this.mMyHandlerThreadInitSingleObs = Single.just(this.getInitializedHandlerThread())
.map(myHandlerThread->{
Log.d(TAG_LOG, "BEFORE .start()");
myHandlerThread.start();
Log.d(TAG_LOG, "AFTER .start()");
return this.mMyHandlerThread;
});
this.mMyHandlerThreadInitSingleObs
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this.getSingleObserver());
}
private SingleObserver<HandlerThread> getSingleObserver() {
String TAG_LOG = ActMain.TAG_LOG + "." + "getSingleObserver()";
return new SingleObserver<HandlerThread>() {
@Override
public void onSubscribe(Disposable d) {
Log.v(TAG_LOG, "[onSubscribe] d: " + d);
}
@Override
public void onSuccess(HandlerThread is) {
Log.v(TAG_LOG, "[onSuccess] is: " + is);
}
@Override
public void onError(Throwable e) {
Log.e(TAG_LOG, "[onError]");
}
};
}
logcat :
2018-12-22 14:56:50.329 12611-12611 V/ActMain: onStart
2018-12-22 14:56:50.332 12611-12611 V/ActMain.MyHandlerThread: constructor called
2018-12-22 14:56:50.333 12611-12611 V/ActMain.getSingleObserver(): [onSubscribe] d: null//<--------------------
2018-12-22 14:56:50.349 12611-12611 D/ActMain.onResume(): BEFORE .start()
2018-12-22 14:56:50.349 12611-12611 D/ActMain.onResume(): AFTER .start()
2018-12-22 14:56:50.350 12611-12630 V/ActMain.MyHandlerThread.onLooperPrepared: ..
2018-12-22 14:56:50.350 12611-12630 D/ActMain.MyHandlerThread.onLooperPrepared: this.getLooper(): Looper (my HandlerThread, tid 416) {2f35ee2}
2018-12-22 14:56:50.363 12611-12630 I/ActMain.MyHandlerThread.onLooperPrepared: [onSubscribe] d: null
2018-12-22 14:56:50.377 12611-12633 D/ActMain.MyHandlerThread.onLooperPrepared.emitter.onComplete():: this.getLooper() initialized: Looper (my HandlerThread, tid 416) {2f35ee2}
2018-12-22 14:56:50.377 12611-12633 I/ActMain.MyHandlerThread.onLooperPrepared: [onComplete]
2018-12-22 14:56:50.425 12611-12611 V/ActMain.getSingleObserver(): [onSuccess] is: Thread[my HandlerThread,5,main]
2018-12-22 14:56:50.514 1700-1724 I/ActivityManager: Displayed com.example.amrbakri.rxhandlerthread_01/.ActMain: +340ms