2014-01-29 3 views
3

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

У меня есть два вида деятельности * Test_Activity * и * Second_Activity *. У Test_Activity есть кнопка для вызова Second_Activity (вызванная с помощью и Intent), и в моей Second_Activity у меня есть кнопка, чтобы вернуться к первому (используя Intent). Я попробовал второй вызов из теста, а затем вернулся к тестированию со второго. Я пробовал это примерно в 10 раз (в течение этого времени активность не была убита), когда я обновил, я обнаружил, что размер кучи увеличен с 3.027Mb - 4.002Mb.

После этого я добавил *finish()* в кодировку при вызове другого действия, повторяющего тот же процесс еще 10 раз. Я обнаружил, что размер кучи увеличивается. Хочет что .. ?? Когда активность убита, она не удаляется из памяти ... ?? Если размер кучи продолжается, как это, мое приложение не будет убито, когда дело доходит до его максимального предела .... ?? Каков максимальный размер кучи для приложения в андроиде ... ??

Еще одна вещь, которую я хотел бы прояснить, - это то, как прийти и приложение, которое имеет только 2 действия (упомянутые выше) без особых ресурсов, потребляет размер кучи 3.027Mb? Я не добавил ни одного чертежа или чего-нибудь еще.

+0

Является ли ваш 'Test_Activity'' android: launchMode =" singleTop "'? – Apoorv

+0

@Apoorv нет его нет, но я дам ему попробовать с этим – suja

+0

@Apoorv Это действительно увеличивает/уменьшает размер кучи, когда android: launchMode = "singleTop" ?? –

ответ

4

Этот рост (от 3 до 4 МБ) абсолютно неуместен. Android может создать экземпляр и сохранить некоторые ресурсы, если это необходимо. Если вы действительно обеспокоены потреблением памяти, вы должны сделать memory profiling using MAT. Вот очень technical article об управлении памятью. Если вы чувствуете, что у вас есть утечки памяти в программе (активность где-то висит, и вы не знаете, где и как), вот Google IO video presentation, который может помочь вам отследить ее.

After that I added *onFinish()* to the coding Существует не onFinish метод обратного вызова, вызываемый Android.

Общая куча, используемая приложением, не стандартизирована. Я видел одно и то же приложение в Sony, использующем от 4 до 6 МБ, и одно и то же приложение на Samsung, занимающее от 15 до 20 МБ. И это было очень простое приложение ... Все зависит от производителей. До тех пор, пока вы не просачиваете большое количество блоков памяти, или вы не используете ресурсы больше, чем вы на самом деле нуждаетесь в них, вы не должны беспокоиться об этих разных применениях памяти.

+0

+1, но почему она варьируется в зависимости от вас по словам поставщиков? и почему любой разработчик не беспокоится об этом ?. Если он по-прежнему будет увеличиваться в течение длительного времени, приложение перестанет работать с OutOfMemory –

+0

Я не уверен, почему происходят эти разные размеры памяти. OutOfMemory происходит только тогда, когда вы используете больший ресурс, чем вы, или вы просачиваете что-то большое. Пока вы делаете все правильно, вам не нужно беспокоиться об этих росте, поскольку устройство знает, как вернуть требуемую память. – gunar

+0

Yup, я согласен, но как OP сказал, что даже OP не использует больший ресурс, а память все еще очень быстро растет. –

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