为什么excludeFromRecents删除所有活动?

时间:2014-05-17 15:33:13

标签: android android-intent

我的应用有两个入口点(MainActivity和FromNotificationActivity)。

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

如果我在清单中没有宣布任何内容......

  • MainActivity
  • 回到
  • FromNotificationActivity
  • 回到

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

如果我在清单中将android:excludeFromRecents="true"添加到FromNotificationActivity并重复相同的序列,我会在最近的列表中找到 nothing

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

3 个答案:

答案 0 :(得分:40)

默认情况下,应用程序的所有活动都具有相同的亲缘关系。具有相同亲和力的活动在概念上属于同一任务。因此,在这种情况下,MainActivityFromNotificationActivity都属于同一个任务。 android:excludeFromRecents确保最近的应用中未列出任务。这就是android:excludeFromRecents true FromNotificationActivityMainActivityandroid:taskAffinity从历史记录中消失的原因。

<强>解决方案: 使用android:excludeFromRecents为这两个活动指定不同的任务。如果该任务不应显示在历史记录中,请FromNotificationActivity使用<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>

{{1}}

答案 1 :(得分:5)

来自the docs

  

<强>机器人:excludeFromRecents
  此活动发起的任务是否应从最近使用的应用程序列表中排除(&#34;最近的应用程序&#34;)。也就是说,当此活动是新任务的根活动时,此属性确定该任务是否不应出现在最近的应用列表中。设置&#34; true&#34;如果任务应从列表中排除;设置&#34;假&#34;如果它应该包括在内。默认值为&#34; false&#34;。

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

答案 2 :(得分:0)

您应该使用从First_Activity到Second_Activity的intent标志。 无需在清单中声明任何内容。 通过使用此代码,将用于意图的活动将是您最近的活动。

Intent intent = new Intent(CONTEXT_OF_CURRENT_ACTIVITY, YOUR_ACTIVITY.class);
intent.putExtra("NAME", "VALUE");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

希望它有用..