Я пытаюсь определить, как поддерживать безопасное приложение в различных жизненных циклах Android, например, запускать другое приложение, переходить в режим сна и т.д. Я понимаю состояния жизненного цикла и методы событий, в которые я могу подключиться, но я я не уверен, как память обрабатывается в отношении того, к чему у меня уже были ссылки. Я хорошо знаю, что мое приложение может быть убито в любое время, если потребуется ОС, но как насчет отдельных ссылок? Вот несколько примеров сценариев: если мое приложение запущено и пользователь получает телефонный звонок, или пользователь запускает другое приложение, или телефон переходит в режим сна. Предполагая, что мое приложение не убито, могу ли я безопасно использовать свои ссылки или я получу случайные указатели на нуль? Я предполагаю, что все это сводится к тому, что... Android либо убивает, либо не убивает и приложение, или он вернет некоторую память (где все еще действительные ссылки) из приложения, не убив ее?
В большинстве случаев, когда пользователь переключается на другое приложение или отвечает на телефон, приложение просто приостанавливается. Когда он вернется, будет вызван onResume()
, и он будет продолжаться на этом пути без проблем. Ссылки и что-то должно быть в порядке. Однако рекомендуется отменить регистрацию слушателей и перерегистрировать их в onResume()
.
Вы всегда должны помнить, что ваше приложение также может быть полностью уничтожено в любое время, поэтому сохраните свои данные.
Правда, в большинстве случаев приложение не будет убито при кратковременном прерывании, например, вызове или электронной почте, но если вы хотите поддерживать эти ситуации, вы должны предварительно очистить или сохранить данные в onPause()
. Когда приложение вернется, оно выполнит onResume()
.
Ссылки не исчезнут до тех пор, пока активность не будет уничтожена, не беспокойтесь о NPE в сценарии pause → resume, если вы не делаете что-то очень странное.
Если вы используете прослушиватели или GPS, вы должны отменить регистрацию во время onPause()
и возобновить ее позже.