Launcher не возвращается к последней использованной активности в моем приложении

Я использую пользовательское приложение Launcher с виджетами, которые используются для запуска (и предоставления обновлений статуса) для приложения.

Приложение состоит из нескольких Activity — для простоты назовем их A, B и C.

A — запущенная активность. Пользователь переходит от A к B, а затем к C (никогда в другом порядке).

В любой момент пользователь может нажать кнопку «Домой» на пульте дистанционного управления и вернуться в приложение запуска.

Если затем пользователь нажимает кнопку «Назад» на пульте дистанционного управления, он всегда возвращается к тому действию, которое использовал в последний раз (A, B или C).

Однако, если они нажимают на виджет (а не нажимают назад), действие, которое выводится на передний план, кажется непоследовательным!

Итак, вот пример того, что происходит

Из (пользовательской) программы запуска используйте виджет для запуска приложения
Отображается действие A
Пользователь нажимает кнопку, которая запускает действие B
Отображается действие B
Пользователь нажимает кнопку "Домой"
Открывается средство запуска
Из (пользовательской) программы запуска используйте виджет для запуска приложения
Отображается действие A, а НЕ B

Иногда я получаю действие B вместо действия A, но я не уверен, при каких обстоятельствах. Я хочу, чтобы действие отображалось вверху стека и никогда не отображалось никакое другое действие (действие B в приведенном выше примере).

Я прочитал документацию Google о флагах активности («одна задача», «один экземпляр» и т. д.), но, похоже, ничего не выскочило из решения моей проблемы.

В моем случае действия A, B, C имеют смысл только в том случае, если они выполняются в таком порядке, и никогда не имеет смысла просматривать предыдущее действие, если вы явно не вернетесь к нему.

Я не уверен, что проблема в том, как виджет запускает приложение, или мне нужно что-то указать в моем манифесте или что-то еще.

Есть идеи?

Спасибо,

Дэн


person Dan    schedule 18.01.2011    source источник


Ответы (2)


Разве это не то, что должно произойти? Разве ваш виджет не запускает действие A? Ожидаете ли вы, что он запустит действие B, если вы попросите его запустить действие A?

(Хотя вы говорите, что у вас иногда запускается B. Разве это не связано с тем, что приложение вытесняется из памяти?)

person Axarydax    schedule 19.01.2011
comment
Спасибо за ответ. Беспокоит кажущаяся хаотичность, с которой отображается Activity после возврата в приложение. Документы не очень ясны в отношении того, как это должно работать. Я читал, что действия в задаче никогда не переупорядочиваются (если вы специально не запрашиваете это) и что запуск приложения с флагом намерения FLAG_ACTIVITY_NEW_TASK должен либо запускать новую задачу, либо, если это действие уже запущено, вывести эту задачу на передний план (см. developer.android.com/reference/android/content)/ ). - person Dan; 20.01.2011
comment
Кроме того, чтобы решить проблему нехватки памяти, я не верю, что это так, потому что из logcat я вижу, что все действия все еще выполняются. - person Dan; 20.01.2011

Извините, но это не ответ, а дополнительная информация, связанная с тем же вопросом.

Я обнаружил шаблон для действий при повторном запуске после нажатия кнопки «Домой».

Смотрите мой вопрос для всех моих исследований:

Активность Android Стек не работает, как указано в документах — последнее действие в стеке задач не показано

Надеюсь, это может помочь...

Я читал, что предлагаемым исправлением для этого странного поведения является использование класса «Диспетчер» в качестве основного, который будет запускать действие на основе состояния приложения... или вы также можете отслеживать все открытые действия, которые необходимо быть восстановлен... но это может стать очень громоздким при наличии сложного дизайна приложения пользовательского интерфейса.

person Valdez V.    schedule 13.06.2012