即使在另一个线程上调用了subscribeOn(),Flowable也会在主线程上运行

时间:2017-10-07 15:25:46

标签: android rx-android rx-java2

问题是我试图从服务器获取一些数据,而我 subscribeOn(Schedulers.io())

但是每当我尝试从服务器获取数据时尝试打印当前线程,我就会获得主线程。

我错过了什么吗?

首先是一些模拟数据

private static Map<String, User> SERVICE_DATA;

static {
    SERVICE_DATA = new LinkedHashMap<>(2);
    new User("1", "User1");
    new User("2", "User2");
}

这里是onCreate Method

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getUsers()
            .flatMap(Flowable::fromIterable)
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    // onNext
                    users -> {
                        //do something with the users list
                    },
                    // onError
                    throwable -> {

                    });
}

这是我获取数据的主要方法

 private Flowable<List<User>> getUsers() {
    return getRemoteUsers().flatMap(users -> Flowable.fromIterable(users).toList().toFlowable());
}

获取远程数据

private Flowable<List<User>> getRemoteUsers() {
    return Flowable
            .fromIterable(getMockData())
            .delay(5000, TimeUnit.MILLISECONDS)
            .toList()
            .toFlowable();
}

用服务器中的实际数据替换。

private Collection<User> getMockData() {
    Thread t = Thread.currentThread();
    Log.d("WTF", "currentThread id: " + t.getId() + " name: " + t.getName());

    return SERVICE_DATA.values();

}

0 个答案:

没有答案