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

ghi*_*ita 2 android android-manifest kotlin

我有 ActivityA 作为启动器活动。

从 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>
Run Code Online (Sandbox Code Playgroud)

活动B:

  <activity
            android:name=".path.ActivityB"
            android:launchMode="singleTask"
            android:screenOrientation="sensorPortrait"
            android:windowSoftInputMode="adjustPan" />
Run Code Online (Sandbox Code Playgroud)

sna*_*msm 5

这就是Activity堆叠的工作原理,这里launchMode是所有s的一些很好的例子,文档中更复杂的信息

简而言之 -Activity启动singleTask(再次)将清除上面的所有内容Activities。你已经MAIN Activity用这个声明了你的第一个launchMode,所以每次点击设备启动器上的图标都会清除你的Activities堆栈。您可以通过重写onNewIntent方法来跟踪它。从最近打开的内容中选择只会将所有Activities堆栈放在前面,最后打开的内容位于 ofc 之上。

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

android:launchMode="standard"
Run Code Online (Sandbox Code Playgroud)