从最近和主屏幕启动应用程序之间的区别
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
的一些很好的例子
简而言之 - Activity
和 singleTask
启动(再次)将清除所有 on-top-of-it Activities
。您已使用此 launchMode
声明了您的第一个 MAIN
Activity
,因此每次单击设备启动器上的图标都会清除您的 Activities
堆栈。您可以通过覆盖 onNewIntent
方法来跟踪它。从最近的选择只会把你所有的 Activities
堆栈放在前面,最后打开在顶部。
考虑删除 launchMode
(这行对您来说是必需的吗?)或将其设置为 standard
(默认)
android:launchMode="standard"
我将 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
的一些很好的例子
简而言之 - Activity
和 singleTask
启动(再次)将清除所有 on-top-of-it Activities
。您已使用此 launchMode
声明了您的第一个 MAIN
Activity
,因此每次单击设备启动器上的图标都会清除您的 Activities
堆栈。您可以通过覆盖 onNewIntent
方法来跟踪它。从最近的选择只会把你所有的 Activities
堆栈放在前面,最后打开在顶部。
考虑删除 launchMode
(这行对您来说是必需的吗?)或将其设置为 standard
(默认)
android:launchMode="standard"