Активность Launcher не запущена из последних приложений

Предположим, что есть две операции: 1. Деятельность A (деятельность по запуску) 2. Деятельность B

При запуске Activity B из Activity A я завершаю операцию A.

startActivity(new Intent(A.this, B.class));
finish();

и Если кнопка выхода нажата из Activity B, действие B будет завершено.

ExitButton.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {
 finish();
 }
 });

Итак, предположим, что Activity B запущен из Activity A, и я получаю выход из Activity B (или выхода из приложения). Есть 2 варианта, с которых приложение запускается: 1. Из значка запуска 2. Из последних приложений

Теперь, если приложение запускается из значка запуска, тогда запускается Activity A. Но если приложение запустилось из последних приложений, тогда запускается Activity B.

Я думаю, что активность B остается в стеке, даже если я назову его финишем(). Мой вопрос: как я могу очистить стек, когда приложение завершит работу? Протестировано в версии Android 2.3.6

2 ответа

Вы можете установить атрибут android: clearTaskOnLaunch = "true" для вашего MainActivity в файле AndroidManifest.xml. Я думаю, что это самый удобный способ удовлетворить ваше требование.

Я только что протестировал и обнаружил, что это работает только при выходе из приложения и запуске приложения из ящика приложений (НЕ долго нажимайте на HOME и выберите приложение).

Если вы хотите всегда перенести корневую активность на фронт, независимо от того, когда вы повторно запускаете приложение или с последнего экрана. Вы можете объявить "андроид: launchMode =" singleTask "для корневой активности, здесь MainActivity.


Помимо моего вышеупомянутого решения об использовании фрагментов, вы также можете попробовать написать android:excludeFromRecents для вашей деятельности в AndroidManifest

<span>андроид: excludeFromRecents</span>

Независимо от того, следует ли исключить задачу, инициированную этим действием, из списка недавно использованных приложений, обзорного экрана. То есть, когда это действие является корневой активностью новой задачи, этот атрибут определяет, не должна ли задача отображаться в списке последних приложений. Установите "true", если задача должна быть исключена из списка; установите "false", если он должен быть включен. Значение по умолчанию неверно"

редактировать

Если вы будете следовать вышеизложенному, может случиться так, что ваш MainActivity также исчезнет из недавнего действия, так как по умолчанию все действия приложения имеют одинаковую близость android:taskAffinity указать другую задачу, используйте android:taskAffinity для которой говорят документы

<span>андроид: taskAffinity</span>

Задача, с которой деятельность связана. Мероприятия с одинаковой близостью концептуально относятся к одной и той же задаче (к одному и тому же "приложению" с точки зрения пользователя). Сродство задачи определяется сродством его корневой активности.

Аффинность определяет две вещи: задачу переопределения активности (см. Атрибут allowTaskReparenting) и задачу, в которой будет выполняться действие при запуске с флагом FLAG_ACTIVITY_NEW_TASK.

По умолчанию все действия в приложении имеют одинаковую близость. Вы можете установить этот атрибут, чтобы группировать их по-разному и даже размещать действия, определенные в разных приложениях в рамках одной и той же задачи. Чтобы указать, что активность не имеет сродства к какой-либо задаче, установите ее в пустую строку.

Если этот атрибут не задан, действие наследует набор аффинити для приложения (см. Атрибут taskAffinity элемента). Имя свойства по умолчанию для приложения - это имя пакета, заданное элементом.

licensed under cc by-sa 3.0 with attribution.