从最近和主屏幕启动应用程序之间的区别

Difference between launching app from recents and home screen

我将 ActivityA 作为启动器 activity。

我从 ActivityA 打开 -> ActivityB。我把应用程序放在后台。

当我从最近打开应用程序时,该应用程序通过 ActivityB 恢复。 当我从主屏幕打开应用程序时,应用程序通过 ActivityA 恢复而不调用 onCreate(),仅调用 onResume()。

为什么当我从主屏幕打开应用程序时,ActivityB 从堆栈中清除,即使从未调用 ActivityA 的 onCreate(),如何解决这个问题?

清单文件如下所示:

活动A:

 <activity-alias
            android:name=".Launcher"
            android:label="@string/app_name"
            android:targetActivity="path.ActivityA">

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

        </activity-alias>

        <activity
            android:name=".path.ActivityA"
            android:launchMode="singleTask"
            android:screenOrientation="sensorPortrait"
            android:theme="@style/BlackIntroTheme"
            android:windowSoftInputMode="adjustPan">
            <nav-graph android:value="@navigation/graph1" />
            <nav-graph android:value="@navigation/graph2" />
            <nav-graph android:value="@navigation/graph3" />
            <nav-graph android:value="@navigation/graph4" />
        </activity>

活动B:

  <activity
            android:name=".path.ActivityB"
            android:launchMode="singleTask"
            android:screenOrientation="sensorPortrait"
            android:windowSoftInputMode="adjustPan" />

这就是 Activity 堆叠的工作原理,HERE, more complex info in DOCs

中所有 launchMode 的一些很好的例子

简而言之 - ActivitysingleTask 启动(再次)将清除所有 on-top-of-it Activities。您已使用此 launchMode 声明了您的第一个 MAIN Activity,因此每次单击设备启动器上的图标都会清除您的 Activities 堆栈。您可以通过覆盖 onNewIntent 方法来跟踪它。从最近的选择只会把你所有的 Activities 堆栈放在前面,最后打开在顶部。

考虑删除 launchMode(这行对您来说是必需的吗?)或将其设置为 standard(默认)

android:launchMode="standard"