Я создавал систему меню, которая имитирует ViewFlipper, за исключением того, что я лично сбрасывал изображения и текст в RootView сам, пытаясь избежать OOM, связанного с Bitmap.Все шло хорошо до вчерашнего дня, когда я осознал, что после нескольких перезапусков и последующих изменений представления я получу бюджет Виртуальной карты Превышает виртуальную машину ... или что-то подобное.Я запустил трекер распределения и попытался увидеть, что не было выгружено, и обнаружил, что эти вызовы являются источником моей проблемы:
_stars.setBackgroundDrawable(getResources().getDrawable(R.drawable.star_1));
_button.setBackgroundResource(R.drawable.button_1);
_image.setImageResource(R.drawable.image_1);
Это, конечно, не весь код, но именно на это указывает мне трекердля MANY распределений, подобных этому:
258 72 android.graphics.BitmapFactory$Options 1 android.graphics.drawable.Drawable
481 68 android.graphics.drawable.BitmapDrawable 1 android.graphics.drawable.Drawable
482 52 android.graphics.Paint 1 android.graphics.Bitmap createBitmap
479 52 android.graphics.Paint 1 android.graphics.drawable.BitmapDrawable$BitmapState
255 36 android.graphics.Bitmap 1 android.graphics.BitmapFactory
254 36 android.graphics.Canvas 1 android.graphics.Bitmap createBitmap
250 36 android.graphics.Bitmap 1 android.graphics.Bitmap nativeCreate
123 36 android.graphics.Bitmap 1 android.graphics.BitmapFactory
Что мне интересно, это нормально?Или у меня где-то есть утечка? По крайней мере 10-20 каждого из них в моих распределениях после теста, и я неизбежно сталкиваюсь с OOM.Не уверен, как позаботиться об этом, кроме как использовать переменную Bitmap, а затем, возможно, Bitmap.recycle (), но это включает в себя проверку того, используется ли представление по-прежнему, и, возможно, перезапуск в неправильное время;следовательно, я не фанат.Я больше просто ищу способ убить все эти выделения каждый раз, когда я закрываю представление. (уже пытался установить для элементов управления значение null onPause () и onDestroy (), надеясь, что они освободят ссылки на растровые изображенияи, таким образом, сможет собирать их, чтобы НЕ ПОЛУЧИТЬ)
[править]
С тех пор я прочитал здесь , что Drawablesобрабатывать по мере необходимости, когда ваша деятельность закончена.Поэтому, поэтому я не должен был вызывать recycle на них, не так ли?Что касается размера одного растрового изображения, это всего лишь одно изображение (480 Вт x 720 ч (x4bpp / 8)) / 1024 = ~ 169 КБ , так что это, кажется, невопрос.