在后台线程上运行独立的Completable

6

我正在尝试创建一个可完成对象并在后台线程上运行它,但是当我在 Schedulers.io() 上订阅时,它没有调用 Actionrun()

基本上,我想通过 RxAndroid 实现以下操作:

     Thread t = new Thread(new Runnable() {
        public void run() {
            doSomething();
        }
    });
    t.start(); 

使用RxAndroid,我正在执行以下操作:
   Completable.fromAction(new Action() {
        @Override
        public void run() throws Exception {
            doSomething();
        }
    }).subscribeOn(Schedulers.io());

如果我使用Schedulers.io(),它的run()方法不会被调用,但如果我使用subscribe(),它会被调用。

我找不到为什么当我订阅Schedulers.io()时它会运行。

1个回答

10

只有在订阅了流之后才会执行它。这意味着,您的Completable必须被订阅,run()方法才会执行。subscribeOn()不会订阅流,它只是告诉程序要在哪个线程上进行订阅。

在您的示例中,只需在末尾添加subscribe()即可启动调用run()方法:


    Completable.fromAction(new Action() {
        @Override
        public void run() throws Exception {
            doSomething();
        }
    })
    .subscribeOn(Schedulers.io())
    .subscribe(...);

将一个动作转化为Completable对象,该对象在调用时会执行这个动作。使用Schedulers.io()来指定执行该动作的线程,然后调用subscribe(...)方法以开始执行。

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