- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个已注册 doOnSubscribe
和 doOnUnsubscribe
操作的 PublishSubject。如果完成订阅,则不会调用这两个操作。
private PublishSubject<Long> publishSubject;
private Subscription subscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
publishSubject = PublishSubject.create();
publishSubject.doOnSubscribe(new Action0() {
@Override
public void call() {
Log.d("SUBJECT", "Someone subscribed.");
}
});
publishSubject.doOnUnsubscribe(new Action0() {
@Override
public void call() {
Log.d("SUBJECT", "Someone UNsubscribed.");
}
});
Observable.interval(1, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
@Override
public void call(final Long tick) {
publishSubject.onNext(tick);
}
});
}
@Override
protected void onResume() {
super.onResume();
subscription = publishSubject.subscribe(new Action1<Long>() {
@Override
public void call(final Long aLong) {
Log.d("SUBJECT", "Got tick " + aLong);
}
});
}
@Override
protected void onPause() {
super.onPause();
subscription.unsubscribe();
}
但在我的 logcat 中,我只收到 “Got tick”
消息,没有收到 “Someone subscribed”
。
07-25 17:57:34.110 8753-8965/com.example.plinzen.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4
07-25 17:57:34.954 8753-8964/com.example.plinzen.myapplication D/SUBJECT: Got tick 0
07-25 17:57:35.950 8753-8964/com.example.plinzen.myapplication D/SUBJECT: Got tick 1
07-25 17:57:36.950 8753-8964/com.example.plinzen.myapplication D/SUBJECT: Got tick 2
07-25 17:57:37.950 8753-8964/com.example.plinzen.myapplication D/SUBJECT: Got tick 3
07-25 17:57:38.949 8753-8964/com.example.plinzen.myapplication D/SUBJECT: Got tick 4
07-25 17:57:39.950 8753-8964/com.example.plinzen.myapplication D/SUBJECT: Got tick 5
知道吗,当订阅在 onResume()
中而取消订阅在 onPause()
中时,为什么不调用这些操作?我是否误解了主题主题?
最佳答案
不要破坏链条:
private Observable<Long> publishedObservable;
[...]
PublishSubject<Long> publishSubject = PublishSubject.create();
publishedObservable = publishSubject.doOnSubscribe(new Action0() {
@Override
public void call() {
Log.d("SUBJECT", "Someone subscribed.");
}
}).doOnUnsubscribe(new Action0() {
@Override
public void call() {
Log.d("SUBJECT", "Someone UNsubscribed.");
}
});
并且在其他方法中使用publishedObservable
。
看,在你的代码中你创建了两个新的 Observables,但是你直接把它们扔掉了; .doFooBar
方法不会修改 Observable,它们会创建一个实现所需行为的新对象。
关于android - 未调用 PublishSubject doOnSubscribe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572587/
在阅读了多篇博文和文档之后,我得出的结论是以下doOnSubscribe 将在工作线程上执行: Observable.just(1) .observeOn(Schedulers
我有一个已注册 doOnSubscribe 和 doOnUnsubscribe 操作的 PublishSubject。如果完成订阅,则不会调用这两个操作。 private PublishSubject
val observable = Observable(...) .publish val subscription = observable.connect observable.doOns
以下代码打印 1, 2 Observable.just(1) .doOnSubscribe(d -> System.out.println(1)) .doOnSubscribe(d -
以下代码打印 1, 2 Observable.just(1) .doOnSubscribe(d -> System.out.println(1)) .doOnSubscribe(d -
为什么在 doOnSubscribe 内调用 subject.onNext(o) 没有任何效果,但是调用 subject.onComplete() 会导致流终止!? final PublishSubj
我如何创建一个单元测试,以在 rxjava 链的 doOnScubscribe 和 doFinally 上完成某种副作用? 例如: Observable.requestSomeValueFromWeb
我无法理解为什么以下代码不起作用。我做错了什么还是 RxJava2 实现中的某种错误? private Disposable savedDisposable; @Test public void te
我想实现一个简单的场景,其中当观察者订阅 PublishSubject 时将发生特定操作。 我是这样实现的: PublishSubjectpublishSubject=PublishSubject.c
我正在尝试实现 Reactor Subscriber Context ( http://projectreactor.io/docs/core/release/reference/#context )
在 RxJava 中,我倾向于使用 Observable.doOnSubscribe 来记录订阅 observable 的时间(以了解何时发生一些创建\获取数据的工作),并发现在调用某些繁重工作时捕获
我是一名优秀的程序员,十分优秀!