Подтвердить что ты не робот

Android launchmode = "singleTask" работает не так, как ожидалось

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

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

Зачем это делать?

4b9b3361

Ответ 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

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