gpt4 book ai didi

Android RxJava,非阻塞?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:23 26 4
gpt4 key购买 nike

我的理解是 rxjava-android 在单独的线程上执行操作(当提供正确的调度程序时),从而导致非阻塞操作,但是快速而肮脏的测试似乎证明这是不正确的。

我使用了以下代码 fragment ,在这两种情况下,UI 都被阻止了......

fragment 1

Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
int i = 0;
while (i == 0) {}
subscriber.onCompleted();
}
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();

fragment 2

Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
SystemClock.sleep(5000);
subscriber.onCompleted();
}
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();

我是不是漏掉了什么?

最佳答案

错误是你使用了错误的Observable。正确的代码应该是:

Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
int i = 0;
while (i == 0) {}
subscriber.onCompleted();
}
});
observable.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe();

subscribeOnobserveOn 都返回一个新的 Observable 来实现它们的功能。但是原始的 Observable 并没有被修改。实际上,每个运算符(operator)总是会在不修改原始 Observable 的情况下创建一个新的 Observable。

关于Android RxJava,非阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447077/

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