【发布时间】:2026-01-20 02:40:01
【问题描述】:
问题描述
在我的一个应用程序中,我看到了非常奇怪的行为:当我的应用程序在前台运行(是最顶层的)时,我可以在系统的“最近”中看到它的活动。但是一旦我把它放到后台,刚才列出的相同活动(即AccountsActivity)就不再出现在最近。我的清单文件的相关部分:
<application
android:name=".WebnetApplication"
android:allowBackup="false"
android:allowClearUserData="true"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".StartActivity"
android:alwaysRetainTaskState="true"
android:excludeFromRecents="true"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".AccountsActivity"
android:excludeFromRecents="false"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize" />
...
调查结果
由于这是我唯一一个行为不端的应用程序,我检查了所有样式,以及我的WebnetActivity 和WebnetApplication,以确保我不会调用任何可能影响“最近”的内容。没有这样的。
然后我开始剥离 Manifest 文件,看看是否会有所改变。正如预期的那样,罪魁祸首潜伏在那里,我仍然不清楚为什么。一开始,Manifest 中的 AccountsActivity 条目根本没有 android:excludeFromRecents 条目 - 这导致 AccountsActivity 在最近记录中根本不可见。当我添加android:excludeFromRecents="true" 时,该活动在“最近”中变得可见,但仅当它位于前面时。当我移到后面时,它就从“最近”中消失了。当我从 StartActivity 声明中删除 android:excludeFromRecents="true" 时,AccountsActivity 在最近使用中变得可见,无论应用程序是在前面还是在后台,我也可以从其条目中完全删除 android:excludeFromRecents 而不会出现任何问题。
问题
目前我正在低头试图理解为什么它会这样 - 这是正常的(我不知道一些事情)还是可能是框架中的错误?任何人都遇到过类似的问题,可以分享经验、想法或解释吗?
【问题讨论】:
-
你在多个设备上试过了吗?在敲你的头之前一定要先确定。
-
好点,但是,是的,我尝试在许多设备和模拟器上进行复制,但它一直在发生。它发生在 2.x 和 4.x 上。如果我的“修复”解决了 2.x 的这个问题,我还没有尝试过,但它适用于 4.x
-
我很确定你的错误是 android:launchMode="singleTask" 以及 exculdeFromRecents 一个单一任务永远不会离开后台,并且 excludefromrecents 会阻止可能在后台的任务不太确定跨度>
-
但我保留了
android:launchMode="singleTask"- 仅从StartActivity中删除了excludeFromRecents和所有工作。这就是我现在处于 WTF 模式的原因。 -
AccountsActivity的入口点是什么?据我所知,那是StartActivity->AccountsActivity。没有?
标签: android android-manifest android-recents