为什么excludeFromRecents删除所有活动?

pin*_*yid 26 android android-intent

我的应用程序有两个入口点(MainActivity和FromNotificationActivity).

我希望MainActivity出现在最近的任务中,但不是FromNotificationActivity)

如果我做的话,清单中没有宣布任何内容......

  • 主要活动
  • 背部
  • FromNotificationActivity
  • 背部

...我发现在最近的任务中列出了FromNotificationActivity

如果我android:excludeFromRecents="true"在清单中添加 FromNotificationActivity并重复相同的序列,我在最近的列表中找不到任何内容.

我必须调用什么咒语,以便在上面的步骤序列之后,我在最近的列表中获得MainActivity.

Man*_*ani 42

默认情况下,应用程序的所有活动具有相同的亲缘关系.具有相同亲和力的活动在概念上属于同一任务.因此,在这种情况下,两个MainActivityFromNotificationActivity属于相同的任务.android:excludeFromRecents确保最近的应用程序中未列出任务.这就是为什么,如果android:excludeFromRecents设定trueFromNotificationActivity, MainActivity从历史消失.

解决方法: 使用android:taskAffinity指定两者的活动不同的任务.使用android:excludeFromRecentsFromNotificationActivity,如果该任务不应该在历史中显示的.

<activity   
    android:name="com.example.MainActivity"
    android:label="@string/app_name"
    android:taskAffinity=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity> 

<activity android:name="com.example.FromNotificationActivity"
    android:label="@string/notification_name"
    android:taskAffinity=".NotificationActivity"
    android:excludeFromRecents="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity> 
Run Code Online (Sandbox Code Playgroud)

  • 我认为可以通过向manifest中的NotificationActivity添加android:noHistory ="true"来实现 (3认同)

Mis*_*ith 6

来自文档

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

所以这不是活动,而是这个标志控制的任务.您没有在清单中发布活动元素,但我猜测这两个活动是在同一个任务中运行的.将launchMode更改为singleTask就可以完成这项任务.