Я хочу знать, вернется ли пользователь на главный экран, если он выйдет из текущего действия.
android
android-activity
lifecycle
virsir
источник
источник
Ответы:
ОБНОВЛЕНИЕ (июль 2015 г.):
Поскольку getRunningTasks () устарел, из API 21 лучше следовать raukodraug ответ или Эд Бернетт один (я бы предпочел второй).
Есть возможность проверить текущие задачи и их стек с помощью ActivityManager .
Итак, чтобы определить, является ли действие последним:
Используйте следующий код:
Обратите внимание, что приведенный выше код будет действителен только в том случае, если у вас одна задача. Если есть вероятность, что для вашего приложения будет существовать такое количество задач - вам нужно будет проверить другие элементы taskList . Подробнее о задачах Задачи и Back Stack
источник
isTaskRoot()
метод.Я собираюсь опубликовать комментарий @ H9kDroid как лучший ответ здесь для людей, у которых есть аналогичный вопрос.
Вы можете использовать isTaskRoot (), чтобы узнать, является ли действие корнем задачи.
надеюсь, это поможет
источник
if (isTaskRoot()) { // do something }
Надеюсь, это поможет новичкам. На основании приведенных выше ответов, которые мне подходят, я также делюсь фрагментом кода, поэтому его будет легко реализовать.
решение : я использовал,
isTaskRoot()
который возвращает истину, если текущая активность - это только активность в вашем стеке, и кроме я также обрабатываю случай, в котором, если у меня есть какая-то активность в стеке, перейдите к последней активности в стеке вместо открытия нового пользовательской.В вашей деятельности
источник
есть самое простое решение, вы можете использовать isTaskRoot () в своей деятельности
источник
Хотя может быть способ добиться этого (см. Другие ответы), я бы посоветовал вам не делать этого. Обычные приложения Android не должны знать, будет ли отображаться главный экран или нет.
Если вы пытаетесь сохранить данные, поместите код сохранения данных в свой метод onPause (). Если вы пытаетесь дать пользователю возможность изменить свое мнение о существующем приложении, вы можете перехватить клавиши вверх / вниз для клавиши Back и метода onBackPressed () и представить им сообщение «Вы уверены?» Подсказка.
источник
Один из способов отслеживать это - включить маркер, когда вы начинаете новое действие, и проверить, существует ли маркер.
Каждый раз, когда вы начинаете новое занятие, вставляйте маркер:
И вы можете проверить это следующим образом:
источник
Проблема с использованием решения sandrstar
ActivityManager
заключается в том, что вам нужно разрешение на получение задач таким образом. Я нашел способ получше:Элемент
Activity
в нижней части стека должен всегда получать эту категорию по умолчанию, в то время как другие действия не должны ее получать.Но даже если это не удается на некоторых устройствах, вы можете установить его при запуске
Activity
:источник
Я создал базовый класс для всех своих действий, расширяющий AppCompatActivity и имеющий статический счетчик:
Пока это работает достаточно хорошо; и независимо от версии API. Конечно, для этого требуется, чтобы все действия расширяли этот базовый класс - что они и делают, в моем случае.
Изменить: я заметил один случай, когда счетчик опускается до нуля до полного выхода из приложения, то есть когда ориентация изменяется и открывается только одно действие. Когда ориентация изменяется, действие закрывается и создается другое, поэтому
onDestroyed
вызывается для последнего действия, а затемonCreate
вызывается, когда такое же действие создается с измененной ориентацией. Это поведение необходимо учитывать; Возможно, можно использовать OrientationEventListener .источник
Android реализует стек Activity, я предлагаю вам прочитать об этом здесь . Похоже , все , что вы хотите сделать , хотя это получить вызывающую активность:
getCallingActivity()
. Если текущее действие является первым действием в вашем приложении и приложение было запущено с домашнего экрана, оно должно (я предполагаю) вернутьсяnull
.источник
Единственное, что здесь упущено, - это щелчок по клавише «Домой», когда он активирован, вы не можете обнаружить это по своим действиям, поэтому было бы лучше управлять стеком действий программно, обрабатывая нажатие клавиши «Назад» и переходя к требуемому действию или просто делаю необходимые шаги.
Кроме того, вы не можете быть уверены, что начало вашей активности из списка «Недавние действия» может быть обнаружено с помощью предварительной установки некоторых дополнительных данных в намерение для открытия активности, так как в этом случае они будут повторно использоваться.
источник