我注意到在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毫秒。
那么我该如何决定为这项任务选择哪个调度程序呢?
答案 0 :(得分:1)
我会说Schedulers.io()
,因为加载资源是一项阻止操作,而在Schedulers中它指出Schedulers.computation()
:
如果
RxJavaPlugins.setFailOnNonBlockingScheduler(boolean)
设置为true
,则尝试执行在此调度程序上运行时阻塞的运算符将抛出IllegalStateException
。