Деятельность не завершается? - PullRequest
4 голосов
/ 11 марта 2011

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

1 Ответ

5 голосов
/ 11 марта 2011

onDestroy не означает, что объект действия был удален, это просто означает, что само действие (как концепция Android) было уничтожено.Это не имеет никакого отношения к реальному объекту Activity.Внутри ОС может принять решение утилизировать ее, особенно когда она немедленно воссоздается из-за изменения конфигурации (например, из-за изменения ориентации с книжной на альбомную).

Даже если это был сбор мусора (что может произойти намного позжеНа Дестрой, в тот момент, когда система фактически должна была выполнять сборку мусора, потому что ей требовалась память), нет гарантии, что finalize будет вызван.Это даже в документации:

"Note that the VM does guarantee that finalize() is called at most
once for any object, but it doesn't guarantee when (if at all)
finalize() will be called.".

Как правило, вы никогда не должны использовать finalize, если вам действительно не нужно.Это не так предсказуемо, как деструктор в C ++.Если вам нужно выполнить очистку в своей деятельности, сделайте это в onPause или onDestroy или любом другом хуке.

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