应用程序应从网络下载大量图像。
我想尽可能高效地在parallel
中下载此图像。
为了实现并行下载所使用的flatMap
,并提供maxConcurent
值。
Disposable ds =
dataManager.getAllImages()
.flatMap(image -> Observable.zip(
dataManager.processImageCaching(image.getFullSizeImage()),
dataManager.processImageCaching(image.getThumbImage()),
(Optional<CachedImage> fullSizeImage, Optional<CachedImage> thumbImage) -> {
image.setFullSizeImageLocalPath(fullSizeImage.map(CachedImage::getFilePathInternal).orElse(null));
image.setThumbImageLocalPath(thumbImage.map(CachedImage::getFilePathInternal).orElse(null));
return image;
})
.subscribeOn(Schedulers.io()), MAX_CONCURRENT_THREADS)
.doOnNext(dataManager::saveCachedImageToDb)
.subscribeOn(Schedulers.io())
该应用程序可以并行工作和下载,但是max concurrent
的使用值可能不是最佳值,并且不能通用。
我猜这个值对于不同的设备可能会有所不同。
有人可以给我一个想法,如何根据设备功能选择最佳的最大并发值?
谢谢。
注意:当前最大并发值为3
答案 0 :(得分:1)
/**
* @param subscribeOn if not set, then creates new Thread (if there is room for new Thread)
* @param observeOn if not set, then uses MainThread
*/
data class SchedulerProvider(val subscribeOn: Scheduler
= Schedulers.from(Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()))
, val observeOn: Scheduler = AndroidSchedulers.mainThread())
我使用类似的东西,它显然基于可用的处理器。我不确定是否有更好的方法