繁体   English   中英

启动器活动未从最近的应用程序启动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM