Как вернуться к тому же экземпляру действия после его возобновления? - PullRequest
4 голосов
/ 12 июня 2011

Проблема несколько странная, и после попытки выяснить это в течение приблизительно одного дня, я публикую это здесь.У меня есть приложение, в котором действие A (основное действие) запускает другие действия (B, C или D).Проблема здесь возникает, когда действие A запустило действие B и нажата кнопка «домой».

Случай 1 - Когда я тестирую свое приложение в режиме отладки на своем устройстве (HTC Desire) после нажатия кнопки «Домой», я снова нажимаю значок приложения, он возвращается к тому же действию (мероприятие B),что и нужно делать.Здесь нет проблем.

Случай 2 - Когда я экспортирую подписанный пакет, а затем устанавливаю приложение на то же устройство, то если я нажимаю значок приложения после нажатия кнопки «Домой», то появляется новый экземплярДействие A (основное действие) запускается НА ВЕРХЕ действия B. Я узнал об этом, потому что, когда я нажимаю «назад» из этого действия, он возвращается к действию B и снова нажимает «назад», показывая действие A.

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

После этого все работает нормально.Я проверял это много раз с разными настройками, но я не могу понять, почему такое поведение.

Любая помощь приветствуется.

Ответы [ 4 ]

0 голосов
/ 12 июня 2011

Запускаете ли вы приложение вручную или с помощью Eclipse или другой IDE? При запуске с Intellij IDEA у меня были точно такие же проблемы. Затем я остановился и запустил его вручную, и поведение было ожидаемым.

0 голосов
/ 12 июня 2011

Относительно случая 1: При запуске намерения из Занятия А для начала Занятия В добавьте флаг FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET Это гарантирует, что когда вы вернетесь домой и снова запустите приложение, будет отображено действие A.

Относительно дела 2: Я не совсем уверен, как это произойдет. Кажется, что он думает, что у вас есть две версии приложения, подписанная и неподписанная, но держит их в одном стеке задач. Вы можете рассмотреть возможность использования singleTask или singleInstance для своей деятельности, если вам нужен только один экземпляр. См. Документ по задачам и заднему стеку для более подробной информации.

0 голосов
/ 12 июня 2011

Я бы согласился с Ноэлем в отношении вероятной причины случая 2. Без переопределения задачи или установки режима запуска, предотвращающего несколько экземпляров действия, есть вероятность, что запуск его из Home не будет считаться таким же стеком, какзапуск его из Eclipse (при условии, что это так).

В моем приложении калькулятора талантов у меня есть все приложение, позволяющее allowTaskReparenting = true, чтобы гарантировать, что ничего не останется в других стеках (в первую очередь, по электронной почте, поскольку он может отправлять URL-адреса запуска по электронной почте).).Затем я установил в качестве основного действия launchMode = "singleTask", так как я хочу, чтобы когда-либо существовал только один его экземпляр, независимо от того, что запускает его или с каким-либо намерением.

Мое единственное другое действие - загрузка и сохранение икоторый имеет noHistory = "true", чтобы убедиться, что он удален и никогда не возвращается.По сути, это означает, что он существует только тогда, когда вы находитесь в нем, и никогда не сможет вернуться к нему.

clearTaskOnLaunch = "true" также обеспечит сохранение только основной Деятельности в стеке при запуске из Home, но этоЭто не всегда так, если у вас есть другие способы заняться своей деятельностью.Если это только когда-либо запускается из дома, то установите это.

Надеюсь, что все помогает.

0 голосов
/ 12 июня 2011

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

...