Про PendingIntent#interview
PendingIntent
— довольно важная часть приложений под Android, о которой мы часто забываем и не до конца понимаем, для чего она нужна. Так как с Android 12 у нас добавились изменения, связанные с работой с
PendingIntent
, давайте посмотрим, что это за класс, ну и поговорим про изменения.
PendingIntent
по сути — обёртка над обычным
Intent
, которая позволяет другому приложению выполнить какое-то действие в будущем от имени вашего приложения.
Отсюда мы сразу выносим две ключевые разницы:
🔹событие связано с будущим действием;
🔹это действие происходит от имени вашего приложения.
Область применения
PendingIntent
довольно обширна. Самые распространённые кейсы — это работа с
AlarmManager
и уведомлениями.
Тут можно найти ещё пару кейсов, например при взаимодействии с получением результата от другого приложения.
PendingIntent
создаётся с флагами, которые влияют на его работу.
🔸FLAG_IMMUTABLE — означает, что
Intent
внутри
PendingIntent
не может быть модифицирован другим приложением. Важно помнить, что приложение всегда может менять свои
PendingIntent
, даже если они неизменяемы для других приложений. До Android 12 все
PendingIntent
, созданные без этого флага были изменяемыми по умолчанию.
🔸FLAG_MUTABLE — означает, что компонент внутри
PendingIntent
может быть модифицирован другим приложением при помощи
PendingIntent.send()
. Флаг был добавлен в Android 12, и очень важно заполнять
ComponentName
при такой модификации.
🔸FLAG_UPDATE_CURRENT — означает, что необходимо обновить содержимое компонента без создания нового
PendingIntent
. Если такого нет, то будет создан новый.
🔸FLAG_ONE_SHOT — позволяет
PendingIntent
выполнять действие только один раз.
🔸FLAG_CANCEL_CURRENT — закрывает существующий
PendingIntent
, что особенно важно, если вы хотите поменять приложение, на которое завязан ваш текущий
PendingIntent
.
Почитать детальнее о том, как использовать этот компонент в Android 12 можно
тут.