RxJava2用Observable.fromIterable时可以设置线程调度吗?

时间:2022-07-24 15:40:56
我用Observable.fromIterable遍例一个集合时,担心集合太大比较耗时,所以用了以下代码:

Observable.fromIterable(xxxList)
    .Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(...);


目的是把集合的遍例放在工作线程中(因为集合将来有可能会变得很大,直接在UI线程遍例有可能会引起界面卡顿),这样做有没有用?如果有用的话会不会导致工作线程和UI线程频繁切换引起性能损耗?会不会创建很多个工作线程?

3 个解决方案

#1


如果你能确保你的.Schedulers.newThread()所开启的线程不是类似while条件一类的死循环等待类的线程,那这个线程在处理完相应的逻辑后,它会关闭。虽然这会创建很多个工作线程,但是处理完以后它都会关闭,你只要不让它在同一时刻创建多个线程,性能损耗就不会太严重,属于正常范畴。另外建议死循环等待类线程尽可能的少开启,最好把相应逻辑处理在同一线程

#2


引用 1 楼 xj396282771 的回复:
如果你能确保你的.Schedulers.newThread()所开启的线程不是类似while条件一类的死循环等待类的线程,那这个线程在处理完相应的逻辑后,它会关闭。虽然这会创建很多个工作线程,但是处理完以后它都会关闭,你只要不让它在同一时刻创建多个线程,性能损耗就不会太严重,属于正常范畴。另外建议死循环等待类线程尽可能的少开启,最好把相应逻辑处理在同一线程

单从我这个例子中看呢?这个很显然不是死循环嘛,之前好像听说过RxJava的线程底层使用的是线程池,如果是线程池不是能重复使用吗?为什么还会创建许多呢?但是我没看过from表在式的源码,不知道具体是不是这样,但即使是使用线程池,在工作线程和UI线程来回切换是不是也还是会损耗性能?没看过RxJava的源码实在是不太好搞,但是这个东西也不是一时半会儿能搞的明白的,所以看看有没有人这么用过

#3


我未曾使用过RxJava2,这个还得你自己琢磨

#1


如果你能确保你的.Schedulers.newThread()所开启的线程不是类似while条件一类的死循环等待类的线程,那这个线程在处理完相应的逻辑后,它会关闭。虽然这会创建很多个工作线程,但是处理完以后它都会关闭,你只要不让它在同一时刻创建多个线程,性能损耗就不会太严重,属于正常范畴。另外建议死循环等待类线程尽可能的少开启,最好把相应逻辑处理在同一线程

#2


引用 1 楼 xj396282771 的回复:
如果你能确保你的.Schedulers.newThread()所开启的线程不是类似while条件一类的死循环等待类的线程,那这个线程在处理完相应的逻辑后,它会关闭。虽然这会创建很多个工作线程,但是处理完以后它都会关闭,你只要不让它在同一时刻创建多个线程,性能损耗就不会太严重,属于正常范畴。另外建议死循环等待类线程尽可能的少开启,最好把相应逻辑处理在同一线程

单从我这个例子中看呢?这个很显然不是死循环嘛,之前好像听说过RxJava的线程底层使用的是线程池,如果是线程池不是能重复使用吗?为什么还会创建许多呢?但是我没看过from表在式的源码,不知道具体是不是这样,但即使是使用线程池,在工作线程和UI线程来回切换是不是也还是会损耗性能?没看过RxJava的源码实在是不太好搞,但是这个东西也不是一时半会儿能搞的明白的,所以看看有没有人这么用过

#3


我未曾使用过RxJava2,这个还得你自己琢磨