5

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

基本上我想通过 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());

如果我这样做,它的run()方法不会被调用Schedulers.io(),但如果我这样做,它就会被调用subscribe()

当我订阅Schedulers.io().

4

1 回答 1

9

只有订阅了 Stream 才会执行。这意味着,您的可完成项目应该被订阅以便run()执行方法。subscribeOn()不订阅流,它只是告诉订阅哪个线程

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


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

于 2017-11-20T08:21:31.567 回答