У меня проблема в моем приложении. При переключении в режиме ландшафта, метод 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 в массиве Bitmap с методом BitmapFactory.decodeResource() и проведением растровых изображений, пока приложение будет уничтожено. Это отлично работает. Когда им swiching в портретном режиме, я изменить расположение с setContentView() и удалить keyboardSurfaceView:
if(keyboardSurfaceView != null && keyboardSurfaceView.getParent() != null)
((ViewGroup) keyboardSurfaceView.getParent()).removeView(keyboardSurfaceView);
растров загружаются один раз. Первый раз при переключении в альбомном режиме. Я столкнулся с ошибкой из памяти, когда swichtin до 10-20 раз от protrait в ландшафте и так далее. Когда я обновляю кучу в представлении ddms, я вижу, что каждый раз, когда я переключаюсь с представления protrait в ландшафтном представлении, размер кучи растет до ок. 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
Я уже прочитал это, но безуспешно. Проблема заключается в растущей куче, хотя растровые изображения уже находятся в памяти – sNore
Если да, можете ли вы разместить больше кода, поскольку код может содержать ошибку где-то еще. – Pongpat