Управление памятью Android для жизненного цикла - PullRequest
1 голос
/ 17 декабря 2010

Я пытаюсь определить, как обеспечить безопасность моего приложения в различных условиях жизненного цикла Android, таких как запуск другого приложения, переход телефона в спящий режим и т. Д. Я понимаю состояния жизненного цикла и методы событий, к которым могу подключиться, но Я не уверен, как обращаться с памятью в отношении вещей, на которые у меня уже были ссылки. Я хорошо знаю, что мое приложение может быть убито в любое время, если это потребуется ОС, но как насчет отдельных ссылок? Вот несколько примеров сценариев: если мое приложение работает и пользователь получает телефонный звонок, или пользователь запускает другое приложение, или телефон переходит в спящий режим. Предполагая, что мое приложение не было убито, могу ли я безопасно использовать свои ссылки или я получу случайные нулевые указатели? Я предполагаю, к чему это сводится ... Android убивает или не убивает приложение, или он восстанавливает некоторую память (где есть действительные ссылки) из приложения, не убивая его?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

По правде говоря, большую часть времени приложение не будет убито при кратковременном прерывании, например, при звонке или по электронной почте, но если вы хотите поддержать эти ситуации, вы должны предварительно очистить или сохранить данные в onPause().Когда приложение вернется, оно выполнит onResume().

Ссылки не исчезнут, пока действие не будет уничтожено, не беспокойтесь о NPE в сценарии паузы -> возобновления, если вы не делаете что-то очень странное.

Если вы используете прослушиватели или GPS, вы должны отменить регистрацию во время onPause() и возобновить ее позже.

2 голосов
/ 17 декабря 2010

В большинстве случаев, когда пользователь переключается на другое приложение или отвечает на звонок, ваше приложение просто приостанавливается. Когда он вернется, будет вызван onResume(), и он продолжит свой путь без проблем. Ссылки и тому подобное должны быть в порядке. Однако рекомендуется отменить регистрацию слушателей и перерегистрировать их в onResume().

Вы всегда должны помнить, что ваше приложение также может быть полностью уничтожено в любое время, поэтому сохраняйте свои данные.

...