![](/img/trans.png)
[英]Activity/Application Launched From NFC Never Appears in Recent Apps List
[英]Launcher Activity not launched from recent Apps
假设有两个活动:
1. 活动A (启动器活动)
2. 活动B.
从活动A启动活动B时 ,我完成了活动A.
startActivity(new Intent(A.this, B.class));
finish();
如果从活动B单击退出按钮,则活动B结束。
ExitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
因此,假设活动B从活动A启动,我从活动B退出(或退出应用程序)。 有两个选项,从应用程序启动的位置:
1.从启动器图标
2.从最近的应用程序
现在,如果应用程序从启动器图标启动 ,则活动A将启动。 但如果应用程序从Recent Apps启动,则活动B将启动。
我认为, 活动B仍然在堆栈中,即使我为它调用了finish() 。
我的问题是:当应用程序退出时,如何清除堆栈? 在Android 2.3.6版本中测试过
您可以在AndroidManifest.xml文件中为MainActivity设置android:clearTaskOnLaunch =“true”属性。 我认为这是满足您需求的最便捷方式。
我刚测试过,发现这只适用于退出应用程序并从应用程序抽屉启动应用程序时(不要长按HOME并选择应用程序)。
如果您希望始终将根活动置于最前面,无论您何时重新启动应用程序或从最近的屏幕启动。 你可以为root活动声明“android:launchMode =”singleTask“,这里是MainActivity。
除了我上面提到的使用片段的解决方案,您还可以尝试在AndroidManifest中为您的活动编写android:excludeFromRecents
机器人:excludeFromRecents
是否应从最近使用的应用程序列表(概述屏幕)中排除此活动启动的任务。 也就是说,当此活动是新任务的根活动时,此属性确定该任务是否不应出现在最近的应用列表中。 如果任务应从列表中排除,则设置为“true”; 如果应该包含它,则设置“false”。 默认值为“false”
编辑
如果您按照上面的说法操作,可能是您的MainActivity也从Recent Activity中消失,因为默认情况下,应用程序的所有活动都具有相同的亲和力。要指定不同的任务,请使用android:taskAffinity
,文档说明
机器人:taskAffinity
活动具有亲和力的任务。 具有相同亲和力的活动在概念上属于同一任务(从用户的角度来看属于相同的“应用程序”)。 任务的亲和力由其根活动的亲和力决定。
亲和性决定了两件事 - 活动重新定位的任务(请参阅allowTaskReparenting属性)以及在使用FLAG_ACTIVITY_NEW_TASK标志启动活动时将容纳活动的任务。
默认情况下,应用程序中的所有活动都具有相同的关联。 您可以设置此属性以对它们进行不同的分组,甚至将在不同应用程序中定义的活动放在同一任务中。 要指定活动对任何任务都没有亲和力,请将其设置为空字符串。
如果未设置此属性,则活动将继承应用程序的关联集(请参阅元素的taskAffinity属性)。 应用程序的默认关联的名称是元素设置的包名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.