Android launchmode = "singleTask" работает не так, как ожидалось
У меня есть приложение, которое работает в фоновом режиме и отображает сообщение об ошибке через систему уведомлений. Это уведомление имеет ожидающий запрос, который ведет обратно на главный экран приложения. На этом главном экране я установил launchmode = "singleTask". Насколько я понимаю из руководства Android Dev, это должно означать, что у моей основной деятельности будет только один экземпляр.
Однако, если пользователь просматривает эту активность в тот момент (или другой в приложении), и идет и касается уведомления, чтобы очистить его, он переходит вперед и помещает в стек другую копию действия, поэтому, если Я нажал кнопку "Назад", он снова вернется на главный экран (с главного экрана).
Зачем это делать?
Ответы
Ответ 1
Вы почти отвечаете на свой вопрос в вопросе;)
Попробуйте использовать:
android:launchMode="singleInstance"
Будьте осторожны, если вы делаете что-то вроде startActivityForResult - вы никогда не получите результат!
Update:
Если вы хотите получать новые данные о намерениях, используя onNewIntent:
public void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
setIntent(intent);
}
Это изменит намерение, которое приложение вернет, когда вы используете getIntent() для нового намерения, которое было передано onNewIntent.
Ответ 2
Проверьте документы activity.launchmode.
У меня была аналогичная проблема и она была решена с помощью android:launchMode="singleInstance"
.
Ответ 3
Мне кажется, что вы хотите следующее поведение, если пользователь выбирает уведомление:
-
Если приложение уже запущено в задаче, просто принесите эту задачу на передний план и покажите, какая активность окажется поверх стека действий.
-
Если приложение еще не запущено в задаче, запустите основное действие приложения в новой задаче.
Если это ваше поведение, вам не нужен (или нужен) какой-либо специальный режим запуска. См. Мой ответ на этот вопрос: Уведомление о восстановлении задачи, а не о конкретной деятельности?
Это должно делать то, что вы хотите.
Ответ 4
У меня была такая же проблема, пока я не удалил цель резервного копирования. Если кто-то отступает от моего основного задания, он должен работать правильно.