Как выбрать оптимальное максимальное одновременное значение для flatMap - PullRequest
0 голосов
/ 29 октября 2018

Приложение должно загружать множество изображений из сети. Я хотел бы загрузить эти изображения в 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

1 Ответ

0 голосов
/ 29 октября 2018
/**
 * @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())

Я использую что-то вроде этого, очевидно, оно основано на доступных процессорах. Я не уверен, что есть лучший способ

...