Жизненный цикл активности

205
05 декабря 2017, 20:44

Заметил, что при нажатии кнопки назад (аппаратной или оболочки), мое подключение к серверу через сокет прерывается и пересоздается и заново не переподключается. Можете объяснить, как вообще работает приложение при нажатии этой кнопки и как можно подобное исправить

Answer 1

При нажатии кнопки назад (аппаратной или оболочки) система Андроид вызывает Activity из стека. Стек работает по принципу "первый пришел-последний вышел". Т.е. самая первая Activity появится последней, если последовательно нажимать кнопку назад.

В Activity от момента инициализации до момента завершения ее работы система последовательно (в основном случае,но не всегда) вызывает следующие методы onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy.

При создании нового экземпляра Activity система всегда последовательно вызывает : onCreate(), onStart() и onResume() и соответственно выполняет программный код, который вы написали при переопределении этих методов.

При вызове следующей Activity, для предыдущей система вызывает метод onPause(). Из этого состояния Activity может быть либо опять возобновлена вызовом метода onResume() либо система ее может скрыть (но не уничтожить!!!) вызвав метод onStop(). При возобновлении Activity из этого состояния будет вызван метод onStart() (onRestart()) и следом метод onResume().

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

И еще один момент, при повороте экрана устройства Activity так же создается заново.

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

READ ALSO
API бэкенд для Android приложения

API бэкенд для Android приложения

Разрабатываю Android приложение, которое включает в себя работу с БД (регистрация пользователя и тд

199
Перевод строки в символьный массив Java

Перевод строки в символьный массив Java

Здравствуйте, возможно ли выполнить подобное? Как перевести символьный массив в строку я знаю, а как наоборот?

181
Защита от SQL инъекций в jdbc java

Защита от SQL инъекций в jdbc java

Часто вижу утверждения, что надо использовать PreparedStatement вместо обычного Statement, чтобы защититься от sql инъекцийКак он защищает?

183
Как перезапустить java программу на linux

Как перезапустить java программу на linux

У меня есть некий бот для телеграмма, как сделать, что бы он сам себя перезапускал?

171