Android - LaunchMode = Singletask и уведомления?
-
27-10-2019 - |
Вопрос
Я знаю, что было несколько постов для того, что я собираюсь спросить, но я не могу найти ни одного с правильным ответом.
Насколько я понимаю, если ваша основная деятельность (давайте назовем это A) Launchmode установлен в Singletask, и A инициировала действие B, то нажмите кнопку «Домой» разрушит стек истории и повторный запуск приложения вернет вас к а не Б.
У меня есть запуск, установленная в Singletask, потому что у меня есть постоянное уведомление, и я не хочу, чтобы несколько экземпляров основной деятельности появлялись всякий раз, когда пользователь нажимает на уведомление.
Есть ли что -то, что мне не хватает, что позволило бы мне обслуживать обоих?
Поэтому я спрашиваю, есть ли я, чтобы я мог убедиться, что всякий раз, когда пользователь хочет запустить приложение, из уведомления или нет, чтобы вернуть его к последней (текущей) деятельности.
Если я переведю запуск в Singletop, он работает, но я получаю несколько экземпляров основной деятельности, когда запускаю его.
Спасибо
Андреас
Решение
Пробовали ли вы установить запуск в Singletop для всех действий в вашем приложении ?? Потому что из вашего запроса я получаю то, что основная деятельность не является одиночным, так что это может привести к другому примеру основного действия, называемого после того, как основная деятельность будет запущена из деятельности, которая была запущена из уведомления.
Или вы можете указать LaunchMode как атрибут самого тега приложения в манифесте.
Другие советы
Я использую следующий код, чтобы избежать нескольких экземпляров деятельности
Intent intent=new Intent(this,RICO.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
Изменение манифеста мне не подходит
У меня проблемы с обоими подходящими. Уведомление работает безупречно только в этом условии: - Использование кнопки «Назад» в основной деятельности (с историей, содержащей только эту деятельность) - не используя кнопку «Домой» - не используя уведомление, если активность, которую вы вызывает, является сверху и активным
В любом другом случае уведомление больше не может вызовать на переднем плане деятельность, используя «Новое намерение (...)»
Я нашел алхимическую комбинацию вариантов манифеста и флажков намерения для получения того, что мне нужно:
Intent intent= new Intent(this, YaampActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Используя эти варианты
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true"
внутри элемента.
Теперь у меня есть уведомление, которое порождает основную деятельность (если это действие еще не находится на переднем плане), и ее поведение верно, даже если деятельность «закрыта», нажав кнопку «Домой» и/или заднюю.