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

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

1 ответ

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

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

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

Другие вопросы по тегам