Intereting Posts
Как вы прикладываете эффект реверберации к данным AudioRecord / PCM и сохраняете их в файле? Android скрывает / скрывает значок приложения программно Разработчики этого приложения не настроили это приложение правильно для входа в Facebook? Android ProgressBar.setProgressDrawable работает только один раз? Android java.lang.VerifyError? Как я могу отличить, изменяется ли переключатель, значение флажка пользователем или программно (в том числе путем удержания)? Qemu, div на ноль, регистр mxcsr Обновление фрагмента из Activity с помощью Rxjava Android Получить внешнее местоположение SDCard в Android Скрытие / отображение панели инструментов при прокрутке фрагмента на вкладках Android – как расширить FragmentActivity и actionbaractivity Как создать тост из IntentService? Он застревает на экране Можно ли использовать приложение HTTP REST API для чата? Android: Как ускорить прокрутку GridView? Вызвать метод фрагмента из адаптера

Разница между Intent.FLAG_ACTIVITY_CLEAR_TASK и Intent.FLAG_ACTIVITY_TASK_ON_HOME

Из документации для Android:

FLAG_ACTIVITY_CLEAR_TASK

Если задано в Intent, переданном Context.startActivity (), этот флаг вызовет любую существующую задачу, которая будет связана с активностью, которая должна быть очищена до начала действия. То есть, деятельность становится новым корнем пустой задачи, и все старые действия завершены. Это можно использовать только совместно с FLAG_ACTIVITY_NEW_TASK.

а также

FLAG_ACTIVITY_TASK_ON_HOME

Если задано в Intent, переданном Context.startActivity (), этот флаг приведет к тому, что новая задача запуска будет помещена поверх текущей задачи домашней активности (если она есть). То есть, возврат из задачи всегда будет возвращать пользователя домой, даже если это не последний вид активности, который они видели. Это можно использовать только совместно с FLAG_ACTIVITY_NEW_TASK.

Рассмотрим эти два фрагмента:

Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

а также

 Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); startActivity(intent); 

Как я понимаю, в любом фрагменте кода мы создаем новую задачу, в которой есть только Activity, и когда вы отжимаете назад, вы переходите на главный экран. Предполагая, что я, вероятно, ошибаюсь, каковы различия между ними? Кроме того, если бы у меня был другой фрагмент с Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK как это будет Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK ?

Solutions Collecting From Web of "Разница между Intent.FLAG_ACTIVITY_CLEAR_TASK и Intent.FLAG_ACTIVITY_TASK_ON_HOME"

Существует разница между двумя фрагментами. Вот важная справочная информация:

  • Задача содержит стек действий. Задача может быть на переднем плане или в фоновом режиме.

  • Задачи также «сложены». Если вы находитесь в задаче A и вы начинаете новую задачу B , задача B укладывается поверх задачи A Если пользователь нажимает клавишу BACK достаточно времени в задаче B , он, в конце концов, вернется в задачу `A. Это стандартное поведение Android.

Ваш фрагмент …

 Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

… будет делать 1 из следующих вещей, в зависимости …

  1. Если Activity имеет ту же близость задачи, что и текущая задача (то есть: задача, из которой выполняется этот код), она очистит текущую задачу (завершит все действия в задаче) и запустит новый экземпляр Activity в текущую задачу. Если пользователь нажимает клавишу BACK, это завершает Activity а также завершает текущую задачу (поскольку в задаче только 1 активность) и возвращает пользователя либо на экран HOME, либо на задачу, которая запускала эту задачу (задача, которая Под этой задачей в стеке задач).
  2. Если Activity имеет другую близость задачи, чем текущую задачу, и уже существует существующая задача с этим сродством к задаче (то есть: существующая задача, к которой будет принадлежать Activity ), то эта существующая задача выводится на передний план, очищается (все действия В задаче завершены), новый экземпляр Activity создается в корне задачи, и эта задача ставится поверх текущей задачи (так что, когда Activity завершается, пользователь возвращается обратно в текущую задачу).
  3. Если Activity имеет другую близость задачи, чем текущую задачу, и нет существующей задачи с этим сближением задачи, создается новая задача и создается новый экземпляр Activity в корне задачи, и эта задача ставится поверх Текущую задачу (так что, когда Activity завершается, пользователь возвращается обратно в текущую задачу).

Этот фрагмент кода …

 Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); startActivity(intent); 

… будет делать 1 из следующих вещей в зависимости …

  1. Если Activity имеет ту же близость задачи, что и текущая задача (то есть: задача, из которой выполняется этот код), а Activity – это корневая активность текущей задачи, это ничего не сделает. Он не запустит новую задачу, не очистит какие-либо действия, не создаст новый экземпляр Activity и не изменит поведение того, что произойдет, когда текущая задача будет завершена (т.е.: если текущая задача запущена Другой задачей, когда все действия в текущей задаче будут завершены, она вернет пользователя обратно в предыдущую задачу в стеке задач).
  2. Если Activity имеет ту же близость задачи, что и текущая задача (то есть: задача, из которой выполняется этот код), а Activity не является корневой активностью текущей задачи, это просто создаст новый экземпляр Activity и поместит его поверх Текущая деятельность в текущей задаче. Он не будет запускать новую задачу, он не очистит какие-либо действия и не изменит поведение того, что произойдет, когда текущая задача будет завершена (то есть: если текущая задача была запущена другой задачей, когда все действия в текущей Задача завершена, она вернет пользователя обратно в предыдущую задачу в стеке задач).
  3. Если Activity имеет другую близость задачи, чем текущую задачу, и уже существует существующая задача с этой аффинностью задачи (то есть: существующая задача, к которой будет принадлежать Activity ), а Activity – это корневая активность этой существующей задачи, то эта существующая задача Выводится на передний план, и эта задача отделена от стека задач (то есть: когда все действия в этой задаче завершены, она вернет пользователя на экран HOME, а не на задачу, которая запустила эту задачу).
  4. Если Activity имеет другую близость задачи, чем текущую задачу, и уже существует существующая задача с такой близостью задачи (то есть: существующая задача, к которой будет принадлежать Activity ), а Activity не является корневой активностью этой существующей задачи, тогда существующая Задача выходит на передний план и эта задача отделена от стека задач (то есть: когда все действия в этой задаче закончены, она вернет пользователя на экран HOME, а не на задачу, которая запустила эту задачу) и новый экземпляр Activity создается и ставится поверх любых существующих действий в этой задаче.
  5. Если Activity имеет другую близость задачи, чем текущую задачу, и нет существующей задачи с такой близостью задачи, создается новая задача и создается новый экземпляр Activity в корне задачи, и новая задача отделяется от (Так, чтобы при завершении Activity пользователь возвращался на экран HOME, а не на задание, которое его запускало).

И, наконец, этот фрагмент …

 Intent intent = new Intent(this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); startActivity(intent); 

… будет делать 1 из следующих вещей, в зависимости …

  1. Если Activity имеет ту же близость задачи, что и текущая задача (то есть: задача, из которой выполняется этот код), она очистит текущую задачу (завершит все действия в задаче) и запустит новый экземпляр Activity в текущую задачу. Если пользователь нажимает клавишу BACK, это завершает Activity а также завершает текущую задачу (поскольку в задаче всего 1 активность) и возвращает пользователя на экран HOME.
  2. Если Activity имеет другую близость задачи, чем текущую задачу, и уже существует существующая задача с этим сродством к задаче (то есть: существующая задача, к которой будет принадлежать Activity ), то эта существующая задача выводится на передний план, очищается (все действия В задаче завершен), новый экземпляр Activity создается в корне задачи, и эта задача отделена от стека задач (так что, когда Activity завершается, пользователь возвращается на экран HOME).
  3. Если Activity имеет другую близость задачи, чем текущую задачу, и нет существующей задачи с такой близостью задачи, создается новая задача и создается новый экземпляр Activity в корне задачи, и эта задача отделена от задачи Stack (так что когда Activity завершается, пользователь возвращается на экран HOME).

Я понимаю, что этот ответ длинный и сложный, но есть так много разных случаев. Я, вероятно, даже не рассмотрел все возможные случаи (например, если у Activity есть специальный режим запуска) …