2012-06-06 6 views
7

Предположим, что у нас есть два вида деятельности.

A - основная деятельность, то есть «домашняя ракета-носитель включена» (фильтры правильного намерения и т. Д.)

B - активность задачи задачи с спецификацией singleTask (может быть только один экземпляр этого действия) и с пользовательской функцией taskAffinity (до дифференцировать, если из основного корня задачи).Как удалить активность singleTask с помощью taskAffinity из последних задач, когда это будет завершено?

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

В какой-то момент времени A начинает B, чтобы начать новую задачу. Цель состоит в том, чтобы удалить B из списка недавних задач, когда пользователь заканчивает B. Пользователь может перейти от B к другим задачам (используя домашнее долгое нажатие), а затем вернуться в B до тех пор, пока он еще не закончен. Запуск A из пусковой установки не приведет B на передний план, поскольку у них есть разные задачи.

Android распознает B как корень задачи, поэтому B отображается в последнем списке задач, даже если он завершен, и пользователь всегда может вернуться к нему. Это не решение переместить B в одну задачу с помощью A, потому что во время работы B пользователь должен иметь возможность переключаться между задачами A и B. Добавление excludeFromRecents к манифесту B полностью удаляет его из списка недавних задач, и это тоже плохое решение.

Как это достичь? (Извините за мой плохой английский)

+0

Вызов завершения() в onResume() Когда задача завершена неправильно? – pawelzieba

+0

Но он по-прежнему остается в списке недавних задач –

+0

@MichaelP Вы хотите, чтобы он никогда не появлялся в последних задачах? Или просто исчезнуть, когда закончите? –

ответ

3

Стандартный ответ

Жаль быть носителем плохие новости, но эта функция не может быть достигнута с использованием стандартных методов, не перекрывая таким образом, что ваше приложение работает. Даже тогда он будет работать только до тех пор, пока ваше приложение работает. Кроме того, для этого потребуется корневое устройство с специализированным ПЗУ, так как вы не можете переопределить функциональность кнопки «Домой». Все, что вы можете сделать, это ответить на onNewIntent(), который не срабатывает, если вы долго нажимаете кнопку «Домой».

Недавние задачи предназначены для простоты использования пользователю, чтобы позволить им вернуться к тем приложениям, которые они использовали, независимо от того, работает ли приложение. Однако есть хорошие новости. Этот процесс не поддерживает ваше приложение! Это просто значок, указывающий на ваш пакет.

К сожалению, это означает, что если ваше приложение все еще работает, происходит что-то еще, что заставляет его работать.

Нестандартные Ответ

Это может быть возможным путем редактирования свойств пакета во время выполнения (во многом таким же образом, что вы можете включить/отключить компоненты из кода Java). Это очень обескураживает, потому что «Недавние задачи» - это функция удобства использования базовой платформы Android. Это потребует некоторых исследований.

0

Немного поздно, но это все еще появляется как верхний хит в Google. Пожалуйста, см. this ответ на возможное решение.

В вашем случае вам придется:

  • Создать новую активность C под названием ExitActivity, и добавить манифест флаги, как описано в другом ответе.
  • активность B должны иметь следующие атрибуты в манифесте: android:taskAffinity="com.example.ActivityB" android:allowTaskReparenting="true" android:launchMode="singleTask" android:documentLaunchMode="always"
  • Установить атрибут сродства задачи на C, чтобы быть таким же, как B
  • Вызов Intent.addFlags в ExitActivity должно быть только три последних: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);