当两个或多个活动都具有带有 action=android.intent.action.ACTION_MAIN 的 intent-filter 时,这意味着什么?

What does it mean when two or more activities, each having intent-filter with action=android.intent.action.ACTION_MAIN?

文档说 https://developer.android.com/reference/android/content/Intent.html#ACTION_MAIN 是一个入口点。

示例代码:

 <activity android:name="org.A.A"
            android:theme="@style/NoTitle"
            android:screenOrientation="behind"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <activity android:name="org.A.C"
            android:theme="@style/NoTitle"
            android:launchMode="singleTop"
            android:screenOrientation="behind">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <activity android:name="org.A.B"
            android:theme="@style/NoTitle"
            android:launchMode="singleTop"
            android:screenOrientation="behind">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

1) 所以使用 android.intent.action.ACTION_MAIN 作为父组件的入口点(父组件我指的是 activity 或接收器或服务)?

2) 如果是,入口点来自哪里,因为没有提到类别。

Android 应用程序由不同的组件组成。例如ActivityServiceBroadcastReceiverContentProvider,每个组件都可以充当应用程序的 入口点

我们以 activity 为例,您在应用程序中定义了一个 activity,操作如下

<intent-filter>
     <action android:name="com.yourapp.SOME_ACTION" />
     <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

然后我在 my 应用程序中启动一个 activity,目的如下。

Intent intent = new Intent("com.yourapp.SOME_ACTION"); // same action
startActivity(intent);

现在会发生什么?系统将搜索具有 com.yourapp.SOME_ACTION 操作的活动,如果它找到一个(在当前情况下,它将是您在应用程序中使用 com.yourapp.SOME_ACTION 创建的 activity),它将 启动您的应用程序(如果它尚未启动)并将在您的应用程序中打开 activity。

看,现在我可以使用 Activitycom.yourapp.SOME_ACTION 输入 到您的应用程序中。其他组件也会发生同样的事情。

Activity with MAIN action 将是 application.If 的入口点你有一个很好,如果不止一个那么你可以有多个活动,通过这些活动你可以进入应用程序。

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>

但是如果您为 activity 提供了类别,它将为该入口点创建启动器。

       <category android:name="android.intent.category.LAUNCHER" />

假设两个活动同时具有 MAIN 操作和 CATEGORY 作为启动器,将创建两个应用程序图标,一个将创建一个 activity 作为入口点,第二个将创建另一个作为入口点。

    <intent-filter>
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>