Я знаю о жизненном цикле андроидов и не нужно добавлять кнопку «выход» в приложение.
Но, тем не менее, эти кнопки назад не очень хорошо работают.
Возможно, вы знаете эту проблему из стандартного SMS-приложения, которое поставляется с Android: вы открываете его, когда получаете новое сообщение, и выходите из него, используя кнопку меню или что-то еще.
После того, как вы проделали это примерно 20 раз, вы решили выйти из приложения с помощью кнопки «назад», что происходит? Вы должны вернуться, хотя 20 просмотров. каждый раз, когда вы нажимаете назад, вы возвращаетесь к просмотру списка «все сообщения (по отправителю)», а когда вы снова нажимаете туда, вы возвращаетесь к сообщению opend 20-1 (сообщение 19). снова вы нажимаете назад и возвращаетесь к просмотру списка, и снова вы нажимаете назад и в итоге получаете сообщение 18. До тех пор, пока, после 40 раз нажав назад, вы, наконец, не выйдете из приложения обмена сообщениями.
то же самое происходит, когда, например, вы получили панель действий со значком «домой», который открывает главный экран вашего приложения. пользователь выбирает действие, и начинается новое действие. затем пользователь нажимает кнопку «Домой» и возвращается на главный экран. при нажатии кнопки «назад» - независимо от того, вызываете ли вы finish()
в прослушивателе onButtonBack или нет, вы, пользователь, ожидаете, что приложение выйдет, но на самом деле приложение вернется к предыдущему действию, что неверно.
такой цикл может произойти по разным причинам, поэтому - даже если бы я думал о том, что я предполагаю, что это жизненный цикл Android - я не хочу ВЫХОДИТЬ (и уничтожать) приложение при нажатии в пределах определенной активности.
вызов метода finish () не помогает. если есть предыдущее действие, оно снова откроет его. Вызов system.exit (0) не очень полезен.
Итак: как правильно предотвратить такие циклы обратного нажатия и / или закрыть приложение (С уничтожением)?
для лучшей иллюстрации того, чего я хочу достичь: рассмотрим A, B, C как деятельность. стрелка (->) иллюстрирует новый вызов намерения с левой стороны от действия стрелки, правая сторона стрелки представляет вызываемое действие. Пример: A -> B означает, что деятельность A начинает деятельность B. Теперь вот что я хочу:
- 1) A -> B -> C pressBack: -> B pressBack: -> A pressBack: -> Выход
- 2) A -> B pressBack: -> A pressBack: -> Выход
- 3) A -> B -> A Нажмите назад: -> Выход
Как видите, back работает как всегда, НО, когда в действии A он выходит из приложения.
поведение, которое я получил сейчас: 1) и 2), как указано выше, но
- 3) A -> B -> A Прессбэк: -> A прессбэк: -> Выход
имейте в виду, я уже перезаписал прослушиватель onBackPressed действия A вызовом finish (). даже вызов system.exit (0) не работает. однако, даже если бы это было: это не то, что я хочу, я хочу РЕАЛЬНЫЙ способ сделать это в стиле Android - я не могу представить, что system.exit (0) - лучшая практика.