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

时间:2014-12-03 09:32:04

标签: android android-activity android-memory android-task

假设有两个活动:
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 (或退出应用程序)。应用程序启动时有2个选项:
1.从启动器图标
2.来自最近的应用程序

现在,如果应用程序从启动器图标启动,则活动A 会启动。但是,如果应用程序是从最近的应用程序启动的,那么活动B 就会启动。


我认为,即使我打电话给完成()活动B 仍会保持堆叠状态。
我的问题是:当应用程序退出时,如何清除堆栈?在Android 2.3.6版本中测试

2 个答案:

答案 0 :(得分:2)

你可以设置android:clearTaskOnLaunch =" true" AndroidManifest.xml文件中的MainActivity属性。我认为这是满足您需求的最便捷方式。

我刚刚测试过,发现这只适用于退出应用并从应用抽屉启动应用时(不要长按HOME并选择应用)。

如果您希望始终将根活动置于最前面,无论您何时重新启动应用程序或从最近的屏幕启动。你可以声明" android:launchMode =" singleTask"对于根活动,这里是MainActivity。

答案 1 :(得分:1)

除了我上面提到的使用片段的解决方案之外,您还可以尝试在AndroidManifest中为您的活动编写android:excludeFromRecents

  

<强>机器人:excludeFromRecents

     

是否应排除此活动启动的任务   从最近使用的应用程序列表,概述屏幕。那   是,当此活动是新任务的根活动时,这个   属性确定任务是否不应出现在列表中   最近的应用。如果任务应从列表中排除,则设置为“true”;   如果应该包含它,则设置“false”。默认值为“false”

修改

如果您遵循上述规则,可能是您的MainActivity也会从Recent Activity中消失,因为默认情况下,应用程序的所有活动都具有相同的亲和力。要指定其他任务,请使用文档所说的<{1}} < / p>

  

<强>机器人:taskAffinity

     

活动具有亲和力的任务。活动与   相同的亲和力在概念上属于同一个任务(相同的   从用户的角度看“应用程序”)。任务的亲和力是   由其根活动的亲和力决定。

     

亲和力决定了两件事 - 活动的任务   重新定位(参见allowTaskReparenting属性)和任务   它会在活动开始时容纳活动   FLAG_ACTIVITY_NEW_TASK标志。

     

默认情况下,应用程序中的所有活动都具有相同的关联。   您可以设置此属性以不同方式对它们进行分组,甚至可以放置   在同一任务中的不同应用程序中定义的活动。至   指定活动没有任何任务的亲和力,设置   它是一个空字符串。

     

如果未设置此属性,则活动将继承关联集   对于应用程序(请参阅元素的taskAffinity   属性)。应用程序的默认关联的名称是   包名由元素设置。