RxJava中如何在另一个线程中使用Thread.sleep函数

3

如何在 Android 中使用 RxJava 每秒更新 UI?我想要实现类似以下的功能:

 for (int i = 0; i <10 ; i++) { //test
               rx.Observable.just(getSleep())
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(v->updateTime());//update textView
        }

    private <T> int getSleep() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return 0;
    }

但是Thread.sleep()在UI线程中执行。 我做错了什么吗?

2个回答

3
Observable.interval(1, TimeUnit.SECONDS) //emits item every second
            .observeOn(AndroidSchedulers.mainThread()) //switches thread from computation (interval's default) to UI
            .subscribe(i -> updateUI()); //update your textView

1
请记得在onPause()中取消订阅,然后在onResume()中重新订阅。 - Daniele Segato

1
rx.Observable.just(getSleep())
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(v->updateTime());//update textView

它就像

int stuff = getSleep();
rx.Observable.just(stuff)
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(v->updateTime());//update textView

如果您的代码在UI线程中运行,则getSleep()将在UI线程中执行。您需要推迟调用(例如使用fromCallable)。
     rx.Observable.fromCallable(() -> getSleep())
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(v->updateTime());//update textView

我正在尝试做类似于秒表的东西。fromCallable并没有像需要的那样纠正这种情况。 - no news

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接