gpt4 book ai didi

android - 未调用 PublishSubject doOnSubscribe

转载 作者:太空狗 更新时间:2023-10-29 15:51:11 29 4
gpt4 key购买 nike

我有一个已注册 doOnSubscribedoOnUnsubscribe 操作的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com