以下是我的活动代码。
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.jakewharton.rxrelay2.PublishRelay;
import com.jakewharton.rxrelay2.Relay;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
public class MyActivity extends AppCompatActivity {
private final String TAG = "MYTAG";
private CompositeDisposable disposable = new CompositeDisposable();
private Relay<Integer> integerRelay = PublishRelay.create();
private Relay<String> stringRelay = PublishRelay.create();
private Relay<Long> longRelay = PublishRelay.create();
private Scheduler mainThread = AndroidSchedulers.mainThread();
private Scheduler ioThread = Schedulers.io();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lesson_selection);
bindInteger();
bindString();
bindLong();
integerRelay.accept(1);
}
@Override
protected void onDestroy() {
super.onDestroy();
disposable.clear();
}
private void bindInteger() {
disposable.add(integerRelay
.subscribeOn(mainThread)
.subscribe(it -> {
Log.d(TAG, "onNext integer [ " + it + " ]");
stringRelay.accept("1s");
stringRelay.accept("2s");
stringRelay.accept("3s");
stringRelay.accept("4s");
stringRelay.accept("5s");
longRelay.accept(1000L);
})
);
}
private void bindString() {
disposable.add(stringRelay
.subscribeOn(mainThread)
.subscribe(it -> {
Log.d(TAG, "onNext String [ " + it + " ]");
})
);
}
private void bindLong() {
disposable.add(longRelay
.subscribeOn(mainThread)
.subscribe(it -> {
Log.d(TAG, "onNext long [ " + it + " ]");
})
);
}
}
正如你所看到的,在onCreate()方法中,首先我订阅了所有的继电器。 (integerRelay,stringRelay,longRelay)
然后,在onCreate()方法的最后,我接受了一个整数值 1 。
根据代码,在此活动启动后,我预计stringRelay
的所有字符串值和longRealy
的长值将被发送到onNext方法,因为我提前订阅了所有的中继。
但是,在bindInteger()内部,integerRealy
的onNext()方法不会被调用。其他人也一样。
即使我按下设备上的取消按钮并重新进入此活动,也没有运气。
我在这里发现了另外一件事。如果我将所有 subscribeOn(mainThread)
更改为 observeOn(ioThread)
。看起来工作得很好。
对于这种情况发生的原因有什么解释吗?
任何帮助,任何文件,任何链接将不胜感激!