В чем разница интента и пендинг интента в Android
Что проверяют
Понимаете ли вы, что PendingIntent это не «отложенный интент», а разрешение другому процессу действовать от имени вашего приложения. Заодно проверяют знание требований современных версий Android.
Как отвечать
Intent это описание намерения: что запустить и с какими данными. Отправляя его через startActivity или sendBroadcast, действие выполняет ваше приложение здесь и сейчас, со своими правами.
PendingIntent это обёртка над интентом, которую вы передаёте наружу: системе уведомлений, диспетчеру будильников, виджету, другому приложению. Держатель может выполнить это действие позже, причём от имени вашего приложения и с его правами, даже если ваш процесс уже не работает. Именно поэтому он и нужен: уведомление создаёт системный процесс, а открыть экран надо в вашем.
Что важно назвать:
- типы:
getActivity,getService,getBroadcast,getForegroundService; - флаги изменяемости обязательны начиная с Android 12: либо
FLAG_IMMUTABLE, либо явныйFLAG_MUTABLE, иначе приложение упадёт при создании. По умолчанию берут неизменяемый, изменяемый нужен редко, например для ответа из уведомления; FLAG_UPDATE_CURRENTи код запроса: дваPendingIntentс одинаковым кодом и совпадающим интентом считаются одним объектом, поэтому без обновления в уведомление попадут старые данные. Это классический баг «все уведомления открывают один и тот же экран»;- отмена:
cancel()на объекте, чтобы отозвать выданное разрешение.
Где спотыкаются
Считают, что PendingIntent просто откладывает запуск по времени.
Забывают флаг изменяемости и получают падение на Android 12 и выше.
Создают несколько уведомлений с одинаковым кодом запроса и удивляются, что данные перезаписались.