У меня есть приложение с меню, где пунктами меню являются скриншоты из представлений ViewAnimator
. Все работает нормально. Я делаю скриншоты с помощью этого простого фрагмента, используя кеш рисования, как написано во многих примерах:
// Drawing cache is off, so build it manually and create scaled bitmap
layout.buildDrawingCache();
Bitmap bm = layout.getDrawingCache();
Bitmap bm_small = Bitmap.createScaledBitmap(bm, item_width, item_height, true);
В той же функции я пытаюсь освободить всю память, используемую для создания скриншота:
layout.destroyDrawingCache();
bm.recycle();
bm = null;
Но, к сожалению, сборщик мусора не освобождает эту растровую память. Я также использовал анализ памяти HPROF, чтобы найти ссылки на растровое изображение, которые не могут быть освобождены, но мне это не удалось. Важная информация состоит в том, что я разрабатываю для Honeycomb Android 3.0, поэтому скриншоты довольно большие - каждый скриншот занимает около 3 МБ памяти и не освобождает ее.
Я не понимаю, почему recycle не работает в этом примере. Я подозреваю, что в моей настройке есть какая-то особенная проблема: Android 3.0 Honeycomb + Аппаратное ускорение включено + Большая куча включена + Использование кэша чертежа. Ни один из подсказок, которые я нашел, не помогает.
Пожалуйста, вы можете объяснить, почему recycle
не работает в этом случае? Буду очень признателен за любую помощь.