у меня проблема в моем приложении. При переключении в режим наземного пространства вызывается метод setContentView() для отображения клавиатуры пианино. Класс клавиатуры пианино расширяет Surfaceview для лучшего отображения нажатых клавиш. Этот класс SurfaceView добавляется как дочерний в мой альбомный макет:
RelativeLayout rootLayout = (RelativeLayout) findViewById(R.id.rootLayout);
RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
relativeLayoutParams.addRule(RelativeLayout.BELOW, R.id.relativeLayoutLowerBar);
rootLayout.addView(keyboardSurfaceView, relativeLayoutParams);
В моем классе keyboardSurfaceView я загружаю растровые изображения в массив растровых изображений с помощью метода BitmapFactory.decodeResource() и удерживаю растровые изображения до тех пор, пока приложение не будет уничтожено. Это прекрасно работает. Когда я переключаюсь в портретный режим, я меняю макет с помощью setContentView() и удаляю keyboardSurfaceView :
if(keyboardSurfaceView != null && keyboardSurfaceView.getParent() != null)
((ViewGroup) keyboardSurfaceView.getParent()).removeView(keyboardSurfaceView);
Растровые изображения загружаются один раз. Первый раз при переключении в ландшафтный режим. Я столкнулся с ошибкой нехватки памяти, когда переключался до 10-20 раз с портрета на пейзаж и так далее. Когда я обновляю кучу в представлении ddms, я вижу, что каждый раз, когда я переключаюсь с вертикального вида на альбомный, размер кучи увеличивается до ок. 20 мб, а затем приложение вылетает. Я не знаю, почему это происходит все время. Растровые изображения загружаются только один раз, а не каждый раз. Я также пробовал bitmap.recycle(); bitmap = nullбезуспешно. Также пытался кэшировать растровые изображения с помощью класса LRUCache, как описано в рекомендациях Google. Я также искал в stackoverflow подходящее решение для моей проблемы. До сих пор это не исправить. Я сам обрабатываю портретные/ландшафтные изменения (метод onConfigurationChanged() переопределен). Помещение всех изображений в drawable-xhdpi немного помогло. Размер кучи растет, как и раньше, при смене ориентации, но все равно растет. Любая помощь будет оценена...
Исключение:
02-13 22:44:09.419: E/dalvikvm-heap(935): 11448-byte external allocation too large for this process.
02-13 22:44:09.419: E/dalvikvm(935): Out of memory: Heap Size=16391KB, Allocated=13895KB, Bitmap Size=16394KB, Limit=32768KB
02-13 22:44:09.419: E/dalvikvm(935): Trim info: Footprint=16391KB, Allowed Footprint=16391KB, Trimmed=432KB
02-13 22:44:09.419: E/GraphicsJNI(935): VM won't let us allocate 11448 bytes