Я столкнулся с проблемой, когда Picasso не может быстро загружать изображения.
Есть 3 ImageViews
, которые отображают левое, среднее и правое изображения. При быстрой перемотке вперед/назад для заданного момента времени выбираются левый, средний и правый и отображаются в трех полях.
Вот инициализация. Кэш OkHttp
составляет 100 МБ вместе с 99 МБ LruCache
.
new Picasso.Builder(getApplicationContext())
.downloader(new OkHttp3Downloader(picassoOkHttpClient))
.memoryCache(new LruCache(99999999))
.build();
Количество изображений, по которым перемещается окно, составляет 3000+. Поэтому я предварительно загружаю изображения как
picasso.load(imageUrl).fetch();
Средний размер изображения составляет 10 КБ — 320 x 180, поэтому он составляет 35 МБ, что меньше 99 МБ LruCache
.
Когда быстрое циклическое переключение работает, многие из изображений GREEN
(из MEMORY
) и BLUE
(из DISK
), но затем, после нескольких быстрых циклов, 3 изображения зависают или становятся очень медленными. В настоящее время большинство изображений BLUE
. Приложение все еще отвечает. Нет OutOfMemory или любого другого исключения.
Опция android:largeHeap
также включена.
Коэффициент попаданий в статистику Пикассо очень низкий. 150/3000.
Изображения загружаются как
picasso.load(leftUrl)
.noFade()
.noPlaceholder()
.into(leftImageView);
picasso.load(middleUrl)
.noFade()
.noPlaceholder()
.into(middleImageView);
picasso.load(rightUrl)
.noFade()
.noPlaceholder()
.into(rightImageView);
Выпуск 1 -> Пикассо требуется несколько минут, чтобы загрузить более 3000 изображений. Изображения загружаются достаточно быстро на других платформах, а пропускная способность достаточна (достаточно для потоковой передачи 4K).
Выпуск 2 -> Даже после того, как Пикассо не торопится и заканчивает загрузку всех изображений, он все равно зависает. Зеленые быстрые, синие медленнее, а потом синие замирают.
PS: Я понимаю, что "раздутые" изображения будут намного больше по размеру и легко превысят пределы 99 МБ. Вот почему только некоторые из них зеленые, а большинство из них синие.