在后台线程上独立运行Completable

use*_*005 3 multithreading android rx-java rx-android android-thread

我想创建一个completable并在后台线程中运行它,但它不是打电话Actionrun()时候,我就订阅Schedulers.io()

基本上我想通过RxAndroid执行以下操作:

     Thread t = new Thread(new Runnable() {
        public void run() {
            doSomething();
        }
    });
    t.start(); 
Run Code Online (Sandbox Code Playgroud)

使用RxAndroid,我正在执行以下操作:

   Completable.fromAction(new Action() {
        @Override
        public void run() throws Exception {
            doSomething();
        }
    }).subscribeOn(Schedulers.io());
Run Code Online (Sandbox Code Playgroud)

它的run()方法是没有得到所谓的如果我这样做Schedulers.io(),但如果我这样做会被调用subscribe()

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

azi*_*ian 6

流只有在已订阅的情况下才会执行。这意味着,应将您的completable订阅以便run()执行命令方法。subscribeOn()没有订阅流,它只是告诉哪个线程进行订阅。

在您的示例中,只需添加subscribe()到末尾即可初始化run()要调用的方法:


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