2013-06-21 4 views
0

Я разрабатываю приложение, которое работает с базовым интерфейсом и сервисом, который может получать чрезвычайные ситуации ». Если пользователь находится в пользовательском интерфейсе и нажимает на него домой или появляется сообщение «Назад», служба продолжает работать. Если служба экстренной помощи получена, я хочу открыть Activity в пользовательском интерфейсе. Для этого мне нужно использовать startActivity в службе с флагом Intent FLAG_ACTIVITY_NEW_TASK.Обслуживание и запуск/перезапуск. Активность

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

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

Я попытался использовать FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_NEW_TASK вместе, чтобы очистить любые другие экземпляры пользовательского интерфейса, а затем открыть пользовательский интерфейс в новой задаче, но CLEAR_TASK - это API 11 и более; мое приложение поддерживает 10.

Любая помощь по вышесказанному оценивается.

ответ

1

Что я сделал с этим делать bindService в onResume (так что вы получите экземпляр Service) деятельности, а затем добавить метод к Service экземпляру, который получает Handler экземпляра из Activity. В вы установили Handler на Service на нуль. Таким образом, Service знает (путем проверки его внутреннего экземпляра Handler), если уже имеется пользовательский интерфейс. Если есть, он отправляет Handler a Message, что произошло. Если нет Handler, он запускает новый интерфейс.

+0

Похоже, что я собираюсь пойти с этой опцией. Спасибо за помощь! – Stephen

0

Вы можете попробовать выбрать режим запуска «singleTask» в вашем файле манифеста:

<activity 
    android:name=".MainActivity" 
    android:launchMode="singleTask" > 

В режиме запуска «singleTask», ваша деятельность будет инстанциирован только один раз.

+0

К сожалению, это конфликтует с флагом CLEAR_TOP, который должен использоваться в Сервисе для запуска Activity – Stephen