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