2012-01-23 4 views
2

В моей игре у меня есть 3 мероприятия: Главное меню -> Подменю -> Экран игры. Поэтому, когда пользователь играет на экране игры, первые два действия неактивны, но не уничтожаются.Android - фоновые изображения занимают слишком много памяти

В каждом макете есть хорошее фоновое изображение. Само изображение довольно мало (40k), но на большом экране (скажем, Galaxy tablet) оно занимает до нескольких мегабайт памяти. После удаления фона из первых двух действий использование памяти в третьей активности падает с 18 до 13 М!

Есть ли способ сохранить фоны и восстановить всю эту потраченную впустую память?

+1

Я думаю, что для временного исправления вы можете просто иметь onclick, который удаляет фон из первых двух, когда вы на третьей странице, а затем восстанавливает их на обратном пути. – VicVu

ответ

2

Почему вы не закончили предыдущие действия при запуске нового действия (C). Затем вы можете переопределить метод onKeyDown в действии C, чтобы начать предыдущее действие (B)

+0

Как я могу закончить B при запуске C? Я имею в виду, где в коде следует положить C.finish()? – dop2000

+0

извините, B.finish() – dop2000

+0

Нет человека .. просто наберите finish() перед тем, как начать свое намерение для нового действия. –

0

Я бы предложил переопределить onPause() или onStop() в вашей деятельности. Там вы можете освободить фон (вызвав layout.setBackgroundDrawable (null))

+0

Это не уменьшает память. Вероятно, GC слишком ленив. – dop2000

+0

Вы всегда можете добавить явный вызов System.gc(). Также убедитесь, что у вашей активности больше нет ссылок на фоновое изображение. –

3

Я думаю, что моя проблема такая же, как и ваша, это решение вам поможет.

Why does the normal pictures allocated a lot of memory?

Вы можете использовать/RES/Drawable-nodpi, фон Pictrue взять только половину объема памяти.

4

У меня возникла аналогичная проблема из-за фоновых изображений в макетах. Нормальный размер выделения памяти изображения должен быть высотой * шириной * 4 байта (в режиме ARGB_8888, режиме по умолчанию).

Если вы видите и выделяете 18 МБ при показе активности, должна быть какая-то проблема. Проверьте, размещаете ли вы фоновые изображения в папке с рисунком. В этом случае система должна масштабировать это изображение до определенной плотности экрана, вызывая большие издержки памяти.

Решение:

  1. Места конкретной версия фонового изображения в каждой папке вытяжки (MDPI, ИПЧР, xhdpi ...), так что система не должна perfom любого процесса масштабирования.
  2. Поместите фоновое изображение в специальную папку ресурсов под названием «drawable-nodpi». Система не будет пытаться масштабировать изображения, размещенные в этом каталоге, поэтому выполняется только процесс растяжения и выделенная память будет ожидаемой.

Более подробная информация в этом answer

Надеется, что это помогает.

+0

Привет, это решение, которое я искал в течение нескольких дней. У меня есть кешированные изображения, их декодировать, но никто из них не работает, кроме этого. большое спасибо. Просто добавьте изображения с высоким разрешением в папку xxhdpi – smoothumut

Смежные вопросы