2010-11-12 9 views
12

У меня есть приложение, которое работает в фоновом режиме и отображает сообщение об ошибке через систему уведомлений. Это уведомление имеет ожидающий запрос, который возвращает главный экран приложения. На этом главном экране я установил launchmode = "singleTask". Насколько я понимаю из руководства Android Dev, это должно означать, что у моей основной деятельности будет только один экземпляр.Android launchmode = "singleTask" не работает должным образом

Однако, если пользователь просматривает это действие в то время (или другое в приложении), и идет и касается уведомления, чтобы его очистить, он переходит вперед и помещает в стек другой экземпляр действия, поэтому если я нажму кнопку «Назад», он снова вернется на главный экран (с главного экрана).

Зачем это делается?

ответ

16

Вы почти отвечая на свой вопрос в этом вопросе;)

Попробуйте использовать:

android:launchMode="singleInstance" 

Будьте осторожны, хотя, если вы делаете anythign как startActivityForResult - вы никогда не получите результат!

Update:

Если вы хотите получить новые данные о намерении использования onNewIntent:

public void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 
    setIntent(intent); 
} 

Это изменит намерение возвращения приложения при использовании getIntent() для нового намерения, который был принят в onNewIntent.

+2

Ну, я пошел вперед и попробовал singleInstance. К сожалению, он по-прежнему ведет себя одинаково. – Ogre

+0

После еще одного взгляда на документацию, мне интересно, нужно ли мне переопределить onNewIntent() в моей основной деятельности, но я не знаю, как это сделать. – Ogre

+0

Ogre - см. Обновление информации об использовании onNewIntent() и взгляните на режим запуска Android one one top и onNewIntent] (http: // stackoverflow.com/questions/1711785/android-single-top-launch-mode-and-onnewintent-method) – Scoobler

3

Проверьте документы activity.launchmode.

У меня была подобная проблема и улажена с помощью android:launchMode="singleInstance".

+0

Его решение также для меня – Javanator

+0

Работает для меня в конце 2014 года после многих расстраивающих часов –

1

Это звучит для меня, как вы хотите следующее поведение, если пользователь выбирает уведомление:

  • Если приложение уже запущено в задаче, просто довести эту задачу на первый план и показать все, что происходит активность чтобы быть сверху стека действий.

  • Если приложение еще не запущено в задаче, запустите основное действие приложения в новой задаче.

Если это поведение, которое вы выполняете, вам не нужен (или не требуется) какой-либо специальный режим запуска. См. Мой ответ на этот вопрос: Notification to restore a task rather than a specific activity?

Это должно делать то, что вы хотите.

0

У меня была такая же проблема, пока я не удалил цель резервного копирования. Если кто-то отступает от моей основной задачи, она должна работать правильно.

Смежные вопросы