android: почему объем памяти не уменьшается даже после завершения суб активности? - PullRequest
0 голосов
/ 29 июня 2011

Почему объем памяти не уменьшается даже после завершения подэтапа?

У меня есть два действия: first_activity и second_activity

В first_activity есть кнопка.

Использование памяти: 3 МБ

    int usedMemory= (int)(Debug.getNativeHeapAllocatedSize() / 1048576L);   

Когда я нажимаю на эту кнопку, начинается вторая операция.

Intent intent   = new Intent(getBaseContext(),second_activity.class);
startActivityForResult(intent, 1);

До сих пор использование памяти:3 МБ

Во втором упражнении я отображаю 8 изображений с помощью ViewFlipper.

Затем использование памяти увеличилось до 17 МБ.На нажатой клавише «Назад» я заканчиваю second_activity.

      @Override
     public void onBackPressed()
     {
         setResult(1);
         finish();
         System.gc();
         super.onBackPressed();
     }

Когда я возвращаюсь из second_activity в first_activity, его использование памяти снова отображается как 17 МБ.Почему это не освобождает память second_activity?

И если я снова пытаюсь перейти к second_activity, приложение принудительно закрывается из-за OutOfMemoryError.

Я не знаю, задан ли мой вопросглупо, но я сталкиваюсь с этой проблемой и не могу ее решить.

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

GC нельзя вызвать принудительно.Вы должны изменить свое представление, чтобы освободить память.

0 голосов
/ 29 июня 2011

Я думаю, что это связано с тем, как Java и ОС Android обрабатывают память.В отличие от C (и аналогичных языков разработки классов) язык Java (и ОС Android, которые полагаются на него) выполняют свою собственную утилизацию мусора.

Я бы не зависел от этого в коде, поскольку он очень сложен (ипо-прежнему определяется ОС)

Подробнее можно прочитать здесь http://chaoticjava.com/posts/how-does-garbage-collection-work/

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