我应该使用哪个调度程序来解码位图

时间:2018-01-23 09:40:50

标签: android multithreading kotlin rx-android bitmapfactory

我注意到在appplication中加载位图需要花费很多时间,如果它在主线程上运行会导致动画滞后,所以我把它移到后台线程。

val scheduler = ...
Observable.fromCallable {
    BitmapFactory.decodeResource(resources, resourceId)
}.subscribeOn(scheduler)
        .observeOn(AndroidSchedulers.mainThread()).subscribe {bitmap ->
    imageView.setImageBitmap(bitmap)
}

但是,有几种调度程序可供选择。一方面,位图是从磁盘加载的,因此它应该是Schedulers.io(),但另一方面它也是计算密集型的,因此Schedulers.computation()是另一个候选者。位图的大小约为100万像素,加载大约需要50毫秒。

那么我该如何决定为这项任务选择哪个调度程序呢?

1 个答案:

答案 0 :(得分:1)

我会说Schedulers.io(),因为加载资源是一项阻止操作,而在Schedulers中它指出Schedulers.computation()

  

如果RxJavaPlugins.setFailOnNonBlockingScheduler(boolean)设置为true,则尝试执行在此调度程序上运行时阻塞的运算符将抛出IllegalStateException