Активность запуска не запущена из последних приложений
Предположим, есть два вида деятельности:
1. Деятельность A (Launcher Activity)
2. Деятельность B
Когда я запускаю упражнение B из занятия A, я завершаю упражнение A.
startActivity(new Intent(A.this, B.class));
finish();
и если кнопка выхода нажата из действия B, действие B завершается.
ExitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Итак, предположим, что действие B запускается из действия A, и я получаю выход из действия B (или выход из приложения). Есть 2 варианта, откуда приложение запускается:
1. Из значка запуска
2. Из последних приложений
Теперь, если приложение запускается с помощью значка запуска, запускается действие А. Но если приложение запущено из Recent Apps, то запускается Activity B.
Я думаю, что активность B остается в стеке, даже если я вызываю finish() для нее.
Мой вопрос: как я могу очистить стек, когда приложение получит выход? Протестировано в версии Android 2.3.6
2 ответа
Вы можете установить атрибут android:clearTaskOnLaunch="true" для своей функции MainActivity в файле AndroidManifest.xml. Я думаю, что это самый удобный способ удовлетворить ваши требования.
Я только что проверил и обнаружил, что это работает, только когда вы выходите из приложения и запускаете приложение из ящика приложения (НЕ нажимайте долго на HOME и выберите приложение).
Если вы хотите всегда выводить корневую активность на передний план, независимо от того, когда вы перезапускаете приложение или с недавнего экрана. Вы можете объявить "android:launchMode="singleTask"для корневого действия, здесь, MainActivity.
Помимо моего вышеупомянутого решения использования фрагментов, вы также можете попробовать написать android:excludeFromRecents
за вашу активность в AndroidManifest
андроид:excludeFromRecents
Должна ли задача, инициированная этим действием, быть исключена из списка недавно использованных приложений, экран обзора. То есть, когда это действие является корневым действием новой задачи, этот атрибут определяет, должна ли задача отображаться в списке последних приложений. Установите "true", если задача должна быть исключена из списка; установите "false", если оно должно быть включено. Значение по умолчанию неверно"
редактировать
Если вы будете следовать вышеизложенному, возможно, ваша MainActivity также исчезнет из Недавних действий, так как по умолчанию все действия приложения имеют одинаковую привязку. Чтобы указать другое использование задачи android:taskAffinity
за что документы говорят
андроид:taskAffinity
Задача, к которой деятельность имеет сродство. Действия с одинаковым сродством концептуально относятся к одной и той же задаче (к тому же "приложению" с точки зрения пользователя). Сходство задачи определяется сродством ее корневой активности.
Сходство определяет две вещи - задачу, для которой повторно создается действие (см. Атрибут allowTaskReparenting), и задачу, в которой будет размещено действие при запуске с флагом FLAG_ACTIVITY_NEW_TASK.
По умолчанию все действия в приложении имеют одинаковое сходство. Вы можете установить этот атрибут для их группировки по-разному и даже помещать действия, определенные в разных приложениях, в одну и ту же задачу. Чтобы указать, что у действия нет сходства для какой-либо задачи, задайте для него пустую строку.
Если этот атрибут не установлен, действие наследует набор сходства для приложения (см. Атрибут taskAffinity элемента). Имя сходства по умолчанию для приложения - это имя пакета, установленное элементом.