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. Вопросы на собесе
  1. Какие существуют типы Intent, и в каких случаях их следует использовать?
  1. Как передать данные между Activity с помощью Intent?
  1. Как запустить Activity с использованием Intent, и как вернуть результат обратно в исходную Activity?
  1. Что такое PendingIntent, и в каких случаях его можно использовать?