Как получилось, что можно взаимодействовать с процессом моего приложения в DDMS даже после того, как я «выйду» из моего приложения? - PullRequest
1 голос
/ 05 марта 2012

Теперь я знаю, что в Android не существует такого понятия, как «выход» из приложения. Под этим я подразумеваю, что процесс, соответствующий приложению, сохраняется в памяти даже после того, как все действия в этом приложении уничтожены. (Ради простоты давайте не будем использовать сервисы и тому подобное). Процесс завершается только тогда, когда система решает сделать это, чтобы освободить память.

Однако, как только все мои действия были уничтожены, я бы предположил, что процесс, соответствующий моему приложению, больше не "активен". Под этим я подразумеваю, что, поскольку мое приложение не выполняет никакой работы, я предполагаю, что процесс больше не выполняет выделения. Это предположение верно?

Я использовал простой пример HelloWorld по умолчанию, который Eclipse ADT дает мне через New Android Project Wizard, и увидел, что это не так. Даже после закрытия приложения я могу отслеживать распределение в DDMS . Кто-нибудь может объяснить причину этого?

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Отслеживание распределения имеет подсказки для вас: столбцы Идентификатор потока и Распределено в .Посмотрите их, и вы узнаете, какой объект и метод выполняли выделение.

Мое неактивное приложение показывает выделения в DdmServer, что указывает на то, что память используется для работы службы DDMS.

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

1 голос
/ 28 марта 2012

В процессе выполняется код, потому что к нему подключен DDMS. Этот код является «удаленной» частью удаленного средства отладки. Поскольку там выполняется код, этот код выделит память, и вы увидите эти выделения.

Если отладчик не подключен к процессу, ОС может уничтожить процесс, если захочет или понадобится. Однако, поскольку отладчик подключен, процесс не прекратится, пока вы смотрите его.

Это пример эффекта Observer , где вы получаете неожиданные результаты только потому, что смотрите; -)

...