应用在后台时,Recents中不显示活动界面

6

问题描述

我的一个应用程序出现了奇怪的行为:当我将应用程序置于前台(最顶部),然后可以在系统的“最近使用”的列表中看到它的活动。但是一旦我将其放到后台,同一活动(即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" />

    ...

发现

由于这是我唯一一个表现不正常的应用程序,我检查了所有样式以及我的WebnetActivityWebnetApplication,以确保我没有调用任何可能影响“最近使用”的内容。但是并没有发现任何问题。

然后我开始剥离清单文件,看看是否会有什么变化。正如预期的那样,罪魁祸首就潜藏在那里,但我不太清楚为什么会这样。起初,清单中的AccountsActivity条目根本没有android:excludeFromRecents条目 - 这导致AccountsActivity根本不可见。当我添加了android:excludeFromRecents="true"时,该活动在“最近使用”中变得可见,但只有当它在前台时才会出现。当我移到后台时,它就从“最近使用”中消失了。当我从StartActivity声明中删除android:excludeFromRecents="true"时,无论应用程序是在前台还是后台,AccountsActivity都会在“最近使用”中可见,并且我也可以完全删除其条目中的android:excludeFromRecents而不会出现任何问题。

问题

目前,我正在努力理解为什么它会表现出这样的行为 - 这是正常的(而我不知道某些东西)还是框架中的错误呢?是否有人遇到过类似的问题,并可以分享经验、想法或解释?


你在多个设备上尝试过了吗?在撞头之前一定要确定。 - Illegal Argument
好的观点,但是是的,我尝试在许多设备和模拟器上重现它,而且它总是发生。它发生在2.x和4.x上。我还没有尝试过我的“修复”是否解决了2.x的这个问题,但对于4.x来说是有效的。 - Marcin Orlowski
2
我相信你的错误在于android:launchMode="singleTask",再加上exculdeFromRecents。单任务模式永远不会留下后退堆栈,而excludefromrecents则防止可能存在于后退堆栈中的任务出现在最近使用列表中。但我不是很确定。 - Illegal Argument
但我保留了android:launchMode="singleTask" - 只是从StartActivity中删除了excludeFromRecents,现在一切都正常工作。这就是为什么我现在处于WTF模式的原因。 - Marcin Orlowski
我不确定,但父活动中的 android:excludeFromRecents="true" 可能会导致这种行为。你能发布启动 AccountsActivity 的意图吗? - ozbek
显示剩余3条评论
2个回答

9
从主活动中删除android:excludeFromRecents="true"
引用自android:excludeFromRecents
无论此活动启动的任务是否应从最近使用的应用程序(“最近的应用程序”)列表中排除。也就是说,当该活动是新任务的根活动时,此属性确定该任务是否不应出现在最近的应用程序列表中。如果任务应从列表中排除,则设置为“true”;如果应包含,则设置为“false”。默认值为“false”。

1
也就是说,当这个活动是一个新任务的根活动时。 - PaulR
“Task”这个词是我没有在正确的上下文中发现。感谢您指出。 - Marcin Orlowski

-1

只需删除

android:excludeFromRecents="true"

或将其设置为false可以解决您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接