YuraAAA, спасибо! Если честно, я как раз ожидал вашего ответа. Да, наблюдал графики в Monitors, нажимал на грузовичок "Initiate GC", зачастую объём сразу уменьшался почти до значений при запуске ListView. Но всё равно, по чуть-чуть этот минимум тоже растёт после прокруток списка. Я помню, что в Glide прописывал:
Java |
1
2
3
| Glide.with(this.appContext)
.load(url)
.skipMemoryCache(true) |
|
И после этого каждый запуск GC сильно помогал. Т.е. видимо, изображения в кэше памяти достаточно сильно растут. Я в конфигурации прописал ограничение в 4 МБ, но, похоже, Glide всё равно как-то этот порог обходит.
Кстати, начинал я в этом проекте с Picasso, уж очень она хороша. Но потом решил пооптимизировать, перешёл на Glide и начал ловить грабли.
Ладно, если что, там ещё есть на SO и в GitHub у них отличная техподдержка. Если что буду ещё оптимизировать, отпишусь. Ну а так грабли с Glide тянут на отдельную статью.
Можно попробовать ещё через LeakCanary или HPROF, но последний - это мучение.
Добавлено через 4 минуты

Сообщение от
Паблито
А почему не RecyclerView ? Его специально и создавали в противовес листвью.
Спасибо! Я просто мало работал с RecyclerView, но всё планировал именно на этом экране его использовать, т.к. там ещё и анимацию потом потребуется сделать, а она как раз с RV хорошо дружит.

Сообщение от
Паблито
В ресайклере есть пул вьюшек, он все что выходит за пределы экрана - переиспользует, а лист - все держит в памяти.
Вот тоже всё время про это думаю, а как доказать - не знаю (из анекдота про ноль пять + ноль пять).
К тому же, на эмуляторе легко добиться того, чтобы выскочил OOM при прокрутке буквально десяти-двадцати изображений.

Сообщение от
Паблито
я бы сказал даже - нужно, а еще проще делать классу, в котором должен жить листенер implements OnClickListener
Вот, я как раз подзанялся, но что-то сходу не получилось. Могу, конечно, написать singleton, но там ещё параметры есть (поскольку использую ViewHolder и текущий getItem(), то приходится вызывать слушатель с параметрами, а я пока что-то затупил).
Добавлено через 1 час 3 минуты
В теме
http://stackoverflow.com/a/14238689/2914140 приведён пример некого очистителя неиспользуемых View в списке:
Java |
1
2
3
4
5
6
7
8
| mGridView.setRecyclerListener(new RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
// Release strong reference when a view is recycled
final ImageView imageView = (ImageView) view.findViewById(android.R.id.icon);
imageView.setImageBitmap(null);
}
}); |
|
Забавно, но у меня он не только ничего не делает, но ещё и притормаживает работу. Думаю, правда, пора переходить на RecyclerView.