当两个或多个活动都具有带有 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 应用程序由不同的组件组成。例如Activity
、Service
、BroadcastReceiver
和 ContentProvider
,每个组件都可以充当应用程序的 入口点 。
我们以 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。
看,现在我可以使用 Activity
和 com.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>
文档说 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 应用程序由不同的组件组成。例如Activity
、Service
、BroadcastReceiver
和 ContentProvider
,每个组件都可以充当应用程序的 入口点 。
我们以 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。
看,现在我可以使用 Activity
和 com.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>