DiskLRUCache для растровых изображений (и других) в Android

В Android много библиотек загрузки изображений (например, Picasso, которые используют 2% хранилища для дискового кеша, Glide) используют дисковый кеш в дополнение к кешу lru в памяти. Я могу понять, почему это может быть полезно для изображений, загруженных из сети — если кеш в памяти заполнен, прочитайте его с диска, а не извлекайте их удаленно — таким образом избегая задержки в сети и т. д. Однако, если мы просто читаем локальные изображения на самом устройстве Android — получим ли мы что-нибудь, используя отдельный дисковый кеш с сериализованными растровыми данными — поскольку данные все равно придется считывать с диска? Вероятно, имеет смысл, если вашему приложению нужна миниатюра и субдискретизация исходного изображения один раз и сохранение его в кеше? Существуют ли какие-либо исследования, показывающие увеличение производительности? Я видел использование дискового кеша в примерах Google и других кеш растрового изображения.


person exifguy    schedule 16.10.2017    source источник
comment
Отличная тема. У меня были проблемы с OutOfMemory при загрузке эскизов с устройства, при работе с изображениями я всегда использую Glide или Picasso, но я заметил, что с Picasso у меня все еще иногда возникают проблемы с нехваткой памяти при работе с большими изображениями. Было бы неплохо, если бы кто-то, кто больше разбирается в мышлении, мог ответить.   -  person HB.    schedule 16.10.2017


Ответы (1)


Итак, вот несколько ссылок, которые я нашел в документах AOSP:

Кэш памяти полезен для ускорения доступа к недавно просмотренным растровым изображениям, однако вы не можете полагаться на то, что изображения доступны в этом кеше. Такие компоненты, как GridView с большими наборами данных, могут легко заполнить кеш памяти. Ваше приложение может быть прервано другой задачей, например, телефонным звонком, и, находясь в фоновом режиме, оно может быть уничтожено, а кеш памяти уничтожен. Как только пользователь возобновляет работу, ваше приложение должно снова обрабатывать каждое изображение.

В этих случаях можно использовать дисковый кеш для сохранения обработанных растровых изображений и сокращения времени загрузки, когда изображения больше не доступны в кеше памяти. Конечно, выборка изображений с диска медленнее, чем загрузка из памяти, и ее следует выполнять в фоновом потоке, поскольку время чтения с диска может быть непредсказуемым.

person exifguy    schedule 16.10.2017