Чем отличаются явный (explicit) и неявный (implicit) интенты?

Посмотреть в Telegram: @AndroidSobes/47
Интенты используются для старта базовых компонентов. Система понимает какой компонент стартовать по атрибутам объекта Intent.

Explicit intent явно содержит информацию о классе компонента. Это может быть объект Class, переданный в конструкторе Intent(context: Context, cls: Class<*>) или методом setClass(context: Context, cls: Class<*>), или объект класса ComponentName, переданный методом setComponent(componentName: ComponentName).
Явные интенты часто используются для старта компонентов внутри приложения, т.к. имена классов известны.
Например startActivity(Intent(context, MyHomeActivity::class.java)) – это старт активити с явным интентом.

Implicit intent не содержит информацию о конкретном компоненте. Система использует косвенные атрибуты, такие как action, type и category для выбора стартуемого компонента. Механизм поиска компонента по атрибутам неявного интента называется Intent Resolution и будет разобран в следующем посте.
Неявные интенты часто используются для старта компонентов других приложений.
Например startActivity(Intent(Intent.ACTION_CALL, Uri.parse("tel:$number"))) – неявный интент, стартующий активити, которая выполнит звонок по заданному номеру.