Android Back-Button-Cycle Issue - PullRequest
       16

Android Back-Button-Cycle Issue

3 голосов
/ 31 января 2012

Я знаю о жизненном цикле андроидов и не нужно добавлять кнопку «выход» в приложение.

Но, тем не менее, эти кнопки назад не очень хорошо работают.

Возможно, вы знаете эту проблему из стандартного 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) - лучшая практика.

1 Ответ

4 голосов
/ 31 января 2012

Ну, это поведение по умолчанию.

Если у вас есть другой подход, просто реализуйте его.

Один из подходов для решения этой проблемы - использовать android:launchMode="singleInstance"* 1007.* для действий, которые могут быть запущены одноразовым способом (может существовать только одно действие)

Например, если страница SMS в приложении SMS была singleTop, для этого потребовалось бы только одно нажатие дляудалить все страницы SMS.Это вопрос выбора


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

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


Наслаждайтесь Наконец, по моему личному мнению, вы можете добавитьКнопка выхода.Пользователям будет приятно.

Проверьте мой пост: Добавление кнопки выхода в приложение Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...