Intent
https://developer.android.com/reference/android/content/Intent |
https://developer.android.com/reference/android/app/PendingIntent |
https://developer.android.com/privacy-and-security/risks/pending-intent |
Intent
Абстрактное описание выполняемой операции. Применяются для запуска Activity
Service
Broadcast Receiver
.
Explicit intent
Явный интент. Содержит явную информацию о классе или компоненте: точно знаем, что запускаем, например, activity или service. Чаще всего используются для старта компонентов внутри приложения.
startActivity(Intent(context, MainActivity::class.java))
Implicit intent
Неявный интент. Не содержит информацию о конкретном компоненте. Система использует косвенные атрибуты, такие как action, type и category для выбора стартуемого компонента. Механизм поиска компонента по атрибутам неявного интента называется Intent Resolution, использует intent filters. Чаще всего используются для старта компонентов других приложений.
startActivity(Intent(Intent.ACTION_CALL, "tel:88005553535".toUri()))
PendingIntent
Описание намерения и целевого действия, которое нужно выполнить с ним. Предоставляя PendingIntent другому приложению, вы предоставляете ему право выполнять указанную вами операцию, как если бы это другое приложение было вами. При создании в PendingIntent записывается информация о желаемом интенте и о том, какой компонент будет запущен. Объекты PendingIntent переживают остановку процесса, поэтому система может использовать PendingIntent для старта приложения. Пример использования PendingIntent – создание уведомления. Метод NotificationCompat.Builder.setContentIntent() принимает PendingIntent, который выполняется, когда пользователь кликает на нотификацию. PendingIntent нужен, чтобы другие приложения (уведомления, виджеты, аккаунт менеджер) могли запускать activity в нашем приложении.
• Отложенное выполнение. PendingIntent используется для описания интента с отложенным выполнением. Самый популярный пример – Notification. При создании нотификации мы указываем PendingIntent, который будет выполнен, когда пользователь жмакнет на уведомление.
• Взаимодействие между процессами. PendingIntent переживает остановку процесса и используется для взаимодействия между процессами. Так же, может использоваться для старта приложения. Пример с push-уведомлениями – пушка может прийти, когда приложение будет не запущено, и в зависимости от логики, можно стартануть приложение.
Android Intent. Вопросы на собесе
- Какие существуют типы Intent, и в каких случаях их следует использовать?
- Как передать данные между Activity с помощью Intent?
- Как запустить Activity с использованием Intent, и как вернуть результат обратно в исходную Activity?
- Что такое PendingIntent, и в каких случаях его можно использовать?