2014-12-03 37 views
1

假设有两个活动:
1. 活动A(启动活动)
2. 活动B启动活动不从最近应用发起


当从启动活动B活动A,我完成了活动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留在堆栈,即使我电话完成()它。
我的问题是:如何在应用程序退出时清除堆栈?在安卓2.3.6版

+0

简单的答案:你不能这是一个Android设计,关于这个问题有几个关于Stackoverflow的问题和答案。是一些奇怪的解决方案,但他们都不是真正的工作或100%的API一致 – brummfondel 2014-12-03 09:37:04

+0

我认为你直接从活动A开始活动B,没有任何输入,也关闭活动A,所以当你从最近启动应用程序可能看起来像活动B将直接显示,而不是活动A. – 2014-12-03 09:37:35

+0

另一种解决方案可能是使用片段,在onCreate()设置您的默认片段 – 2014-12-03 09:40:26

回答

1

经测试除了使用片段我上面提到的解决方案,你也可以尝试在AndroidManifest写android:excludeFromRecents为您的活动

安卓excludeFromRecents

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

编辑

如果按照上面可能是您的MainActivity也从最近的活动消失,因为默认情况下的应用程序的所有活动都有相同的亲和力。要指定一个不同的任务使用android:taskAffinity为其文档说

安卓taskAffinity

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

的亲和力决定了两件事情 - 该活动是 重新父当它与 FLAG_ACTIVITY_NEW_TASK标志推出,将容纳活动任务(见allowTaskReparenting属性)和任务 。

默认情况下,应用程序中的所有活动都具有相同的关联性。 您可以设置此属性以不同方式对它们进行分组,甚至可以在同一任务中的不同应用程序中定义的活动。若要 指定该活动不具有任何任务的关联性,请将其设置为空字符串 。

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

+0

这不是一个完美的解决方案,因为我从最近的应用程序中删除应用程序。其他活动。 另外我不会去片段,我想保持我的代码笑rt和干净。感谢您的回复:) – 2014-12-03 10:28:34

2

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

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

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

+0

我无法使用此标签“clearTaskOnLaunch”,每次我重新启动应用程序时,它都将删除所有后退活动。我只需要处理最近使用的应用程序。感谢您的回复:) – 2014-12-03 12:55:31

+0

它不工作...我有两个活动A和B ...我从推送通知启动活动A(不是我的启动器活动),从那里我去活动B并完成活动A,然后我压倒了活动A.该应用程序已退出,因为它应该因为活动A已经完成。当用户从最近的任务活动B打开应用程序时,但我已经压倒了活动B,因此活动中不应该有任何活动,因此我的splashscrreen应该打开...帮助我 – 2017-04-05 22:40:26