2014-12-03 2 views
1

Предположим, есть два вида деятельности:
1. Activity A (Launcher) Активность
2. активность BLauncher активность не запускается из последних приложения


При запуске активность 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 запускаются из Activity A, и я получаю выход из активность B (или выхода из приложения). Есть 2 вариант, откуда приложение запускаются:
1. панели запуска
2. Из последнего приложения

Теперь, если приложение запускается из панели запуска, затем Activity A запускаются. Но если приложение запустилось с Недавние приложения, то Активность B получить запущен.


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

+0

Простой ответ: вы не можете. Это дизайн Android, и в Stackoverflow есть несколько вопросов по этой проблеме. это некоторые странные решения, но ни один из них на самом деле не работает или 100% соответствует API. – brummfondel

+0

Я думаю, что вы начинаете активность B из Activity A напрямую без каких-либо входных данных, а также для закрытия активности. Поэтому, когда вы запускаете приложение из последних, оно может выглядеть как активность B будет отображаться непосредственно взамен активности A. –

+0

Другим решением может быть использование фрагментов, внутри onCreate() установлен ваш фрагмент по умолчанию. –

ответ

1

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

андроид: excludeFromRecents

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

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

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

андроид: taskAffinity

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

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

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

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

+0

Это не идеальное решение, так как я удаляю приложение из последних приложений. Также я использую теги для Другие действия. Также я не занимаюсь фрагментом, я хочу сохранить свой код sho rt и чист. Спасибо за ответ :) –

2

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

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

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

+0

Я не могу использовать этот тег «clearTaskOnLaunch», каждый раз, когда я заново запускаю приложение, он удаляет все обратные действия. Мне нужно обрабатывать только случай для последних приложений. Спасибо за ответ :) –

+0

не работает ...У меня есть два вида активности A и B ... i запустил активность A (а не мою активность запуска) из push-уведомления, и оттуда я перехожу к активности B и заканчивает Activity A, а затем я удаляюсь по активности A. приложение вышло из него потому что активность A уже завершена. и когда пользователь открывает приложение из задач ретентатов, активность B открыта, но я уже подавил активность B, поэтому не должно быть никакой активности в активности, поэтому мой всплывающий экран должен открыть ... помогите мне –

Смежные вопросы