После дня отладки я обнаружил, что новое действие, запущенное из ожидающего намерения (действие B в стеке), будет потеряно где-то в ActivityManager позади либо уже открытого действия (действие A), либо, возможно, окна недавнегооткрытые приложения (долгое нажатие на клавишу домой).
Это произошло ТОЛЬКО в том случае, если вы вышли из Деятельности А с использованием длинного нажатия на клавишу возврата ТОЛЬКО в версиях Android <2.1.Любой другой случай перехода от Деятельности A (короткое нажатие клавиши «Домой», нажатие клавиши «назад») позволил бы открыть ожидающее намерение на Деятельности B и сфокусироваться над всем на экране.В Android 2.2 и выше код работает абсолютно без проблем.Очень странно.Чтобы сделать вещи еще более странными, если я добавлю сообщение Toast для отображения в методе onRestart упражнения A, проблема полностью исчезнет.В методе onPause действия A тоже нет ничего странного .... Я до сих пор не знаю. </p>
Я перепробовал почти все флаги в ожидающем намерении для действия B, но ни один из них не позволил бывсплывающее окно, чтобы добраться до вершины стека активности .... Я думаю, что Nanne и willytate поставили меня на правильный путь ...
Я отказался от метода установки ожидающего намерения внутри службы, ядумаю, что это нарушает сходство между действием A и действием B. Когда я установил ожидающее намерение для действия B внутри действия A, в отличие от службы, работающей в фоновом режиме, действия B (в форме всплывающего окна через android:theme = "@ android: style / Theme.Dialog" в манифесте) всегда будет отображаться в верхней части стека.
Еще раз, эта "потеря фокуса" на деятельности только когда-либо случалась со мнойв этом процессе:
- Android 2.1
- Запуск активности A
- Использование службы для установки уведомления в строке состояния с ожидающим намерением запустить Activity B
- Перейдите от действия , удерживая нажатой клавишу Home * , к любому другому приложению.
- Служба запускает уведомление в строке состояния с намерением запустить действие B.
- Нажмите на уведомление, чтобы открыть действие B.
- Операция B, созданная в виде диалога, не найдена, и действие A останавливается в стеке, но остается на паузе.Нет ответа на прикосновение пользователя вообще к действию А, и отображаемый таймер не движется.Возможно, задание застряло в onPause?
Единственный способ отобразить задание B - это снова нажать и удерживать клавишу возврата.Когда это будет сделано, я вижу на экране следующее в порядке убывания с первым в качестве первого в верху стека, готового для ввода пользователем:
- Список недавно использованных приложений.
- Упражнение B.
- Acitivyt A.
Нажатие кнопки «Назад», чтобы закрыть список недавно использованных приложений, позволит Упражнению B принять пользовательский ввод, и оттуда всеработает нормально.
Если бы это не было пустой тратой времени, я бы лучше понял, как Android обрабатывает стек приложений.
Может кто-нибудь еще (если они действительно этого хотят)заново создать эту проблему?