убийственная активность на Android не очищает память? - PullRequest
3 голосов
/ 26 октября 2010

У меня есть игра, работающая на Android.

В основном, она по структуре похожа на lunarlander

Я начал свою деятельность, используя макет, чтобы запустить класс.

Когда я нажимаю домой, я могу вернуться к своей игре каждый раз.Я всегда закрываю поток и создаю новый.

Проблема возникает, когда я нажимаю BACK botton.

Я думаю, что моя игра закончена.но после 4 раз «нажмите на игру» -> «нажмите НАЗАД»

появляется ошибка -> «неожиданно остановился»

Я переопределил функцию: onPause() и вызвалfinish().Но это все еще происходит.

Кто-нибудь может мне помочь?

1 Ответ

4 голосов
/ 28 октября 2010

Проблема, с которой я сталкиваюсь:

Я выделяю несколько битовых карт в своем UIthread. Система не освобождает память, если вы нажимаете кнопку НАЗАД.

Даже если действие уничтожено, оно не возвращает память, используемую растровым изображением.

Итак, когда я попытался проверить свою игру, нажимая назад и вперед между BACK и моей игрой, виртуальная машина отключалась из-за нехватки внешней памяти.

Растровые изображения, которые я декодировал из ресурсов, заполнили всю мою память.

Самый простой способ это исправить:

protected void onPause()
{
    super.onPause();
    System.gc();
}

, так как есть ошибка очистки памяти Bitmap в Android. Мы вручную вызываем GC, чтобы заставить его очистить наши растровые изображения. Это ошибка.

или используйте Bitmap.recycle(), если хотите немедленно освободить растровое изображение.

http://mobi -solutions.blogspot.com / 2010/08 / как к, если вы-хотите-на-создать-and.html

http://code.google.com/p/android/issues/detail?id=8488

...