Управление памятью Android для жизненного цикла

1

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

Теги:
memory-management
lifecycle

2 ответа

2
Лучший ответ

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

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

  • 0
    Спасибо, это то, что мне нужно было знать. Полезно знать и о перерегистрации слушателей.
  • 0
    Рад, что смог помочь. Удачи в вашем приложении.
2

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

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

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

  • 0
    Спасибо за ваш ответ. «Ответ» присуждается Computerish, так как этот ответ пришел первым.
  • 0
    Все в порядке, надеюсь, это помогло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню