2015-10-08 3 views
0

Я прохожу через сайт разработчика Android для Displaying Bitmaps Efficiently.Лучшая техника кэширования памяти

Но я в замешательстве с приведенным ниже инструкцией и нуждаются в предложениях по хорошему методу кэширования памяти. Ниже приведена ссылка.

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

Примечание: В прошлом популярный реализация кэш-памяти был SoftReference или WeakReference растровый кэш-памяти, однако это не рекомендуется . Начиная с Android 2.3 (API Level 9) сборщик мусора более агрессивен, собирая мягкие/слабые ссылки , что делает их довольно неэффективными. Кроме того, до Android 3.0 (уровень API 11) данные поддержки растрового изображения были сохранены в исходной памяти , которая не была выпущена предсказуемым образом, потенциально заставляя приложение в кратчайшие сроки превышать его пределы памяти и сбоя.

Таким образом, - это LRU Cache, лучшая техника, чем слабая ссылка/Мягкая ссылка и почему это так? Также как управлять такими же для разных версий Android-устройств?

Пожалуйста, помогите мне и предложите лучшую технику для того же.

ответ

1

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

+0

Я не вижу, что такое дооснащение фотографией ... –

+0

спасибо, что указали это –

0

Это зависит от того, что вы используете при отображении растровых изображений? если вы используете библиотеки, такие как volley, picasso, универсальный загрузчик изображений и другие, тогда они эффективно обрабатывают каширование. если вы не используете эти библиотеки, есть HttpResponseCache. но если честно, я никогда не испытывали на Bitmaps

0

О ссылках

SoftReference должны быть очищены и помещён как можно позже, то есть, в случае ВМ находится в опасности запуска из памяти.

A WeakReference может быть очищен и установлен в очередь, как только известно, что он слабо ссылается.

Проверить this для более

Использование LRU кэша: Почему она предпочитает, простой ответ, потому что это часть андроида. Предпочтительно использовать кеш LRU в качестве части лучших практик Android.

Проверить это Android best practices

О версионирование: Он не зависит от андроида версии (чуть ниже 2.3). Но это зависит от устройств (размер кеша LRU различается).

Используйте этот расчет для определения размера в каждом устройстве.(Android официально предлагают это)

int memoryClass= ((ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass(); 
int cacheSize = 1024 * 1024 * memoryClass/ 8; 
Смежные вопросы