Что если указать intent-filter у нескольких Activity

«Что если указать intent-filter у нескольких Activity» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Если у нескольких Activity указаны одинаковые intent-filter, система предложит пользователю выбрать, какое приложение (и Activity внутри него) должно обработать интент. Внутри приложения выбор будет между указанными Activity.

Пример:

<activity android:name=".ActivityA">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity>

<activity android:name=".ActivityB">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity>

При открытии ссылки система покажет диалог выбора между ActivityA и ActivityB. Чтобы избежать этого, можно:

  1. Указать разные data или action
  2. Использовать android:priority для приоритета
  3. Динамически обрабатывать интенты в одной Activity и перенаправлять