порядок активности Android, нужен только один экземпляр текущей активности вместо очистки стека

singleTask и singleInstance сами по себе не являются ответом.

У меня есть действия в стеке ... n, n+1, n+2

элементы в n+2 могут открывать n+1

это создает стек

... n, n+1, n+2, n+1

Я хочу, чтобы он создал стек

... n, n+2, n+1 , где n+1 перемещается на вершину стека

singleTask создает этот стек

... n, n+1

и singleInstance создает этот стек

n+1 где все предыдущие мероприятия закрыты.

ни чего не хочу.

есть ли режим запуска, который я могу использовать?

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY только делает так, что это действие не загружается снова с нуля, но не очищает повторяющееся действие в истории, может быть, есть комбинация флагов, которые я могу использовать? или я могу найти это действие в индексе стека действий и удалить его, если это не самое последнее действие?


person CQM    schedule 02.05.2014    source источник


Ответы (2)


Я думаю, вам следует использовать FLAG_ACTIVITY_REORDER_TO_FRONT.

Если он установлен в намерении, переданном в Context.startActivity(), этот флаг приведет к тому, что запущенная активность будет помещена в начало стека истории ее задачи, если она уже запущена. Например, рассмотрим задачу, состоящую из четырех действий: A, B, C, D. Если D вызывает startActivity() с Intent, разрешающим компонент действия B, то B будет перемещен в начало стека истории, с таким результирующим порядком: A, C, D, B. Этот флаг будет игнорироваться, если также указан FLAG_ACTIVITY_CLEAR_TOP.

person Than    schedule 02.05.2014
comment
да, странно себя ведет. В этом примере моя активность A по какой-то причине убита - person CQM; 02.05.2014
comment
удаление reorder_to_front поддерживает все мои действия. - person CQM; 02.05.2014

Вы должны просто добавить FLAG_ACTIVITY_REORDER_TO_FRONT к своему намерению. Без этого флага ваш сценарий создает стек следующим образом: (запуск Activity A, запуск B, а затем B снова запуск A)

TaskRecord{41ab0370 #23 A com.example.testproject U 0}
  Run #7: ActivityRecord{41c655a8 u0 com.example.testproject/.MainActivity}
  Run #6: ActivityRecord{41d378d0 u0 com.example.testproject/.SecondActivity}
  Run #5: ActivityRecord{41bf99b8 u0 com.example.testproject/.MainActivity}

Но с помощью флага без какого-либо конкретного режима запуска вы получите следующий стек, который, как я предполагаю, вам нужен:

TaskRecord{41d8a838 #25 A com.example.testproject U 0}
  Run #6: ActivityRecord{41d89590 u0 com.example.testproject/.MainActivity}
  Run #5: ActivityRecord{41c52b80 u0 com.example.testproject/.SecondActivity}
person m.hashemian    schedule 02.05.2014