2011-11-03 210 views
2

我有两个活动FirstActivity和SecondActivity。Android:我如何从活动堆栈中完全删除活动?

FirstActivity有一个intent过滤器MAIN,LAUNCHER和DEFAULT。 SecondActivity只是一个正常的活动,AndroidManifest中没有设置其他标志。

我的应用程序启用了C2DM,当收到通知时,会显示一个任务栏图标,点击后会打开SecondActivity。

抵达通知有两种情况: 首先,我的应用程序已经在通知到达时运行,第二个我的应用程序完全没有运行。

在第一种情况下,一切都很好。收到通知后,我从通知下拉单击,然后显示我的SecondActivity。当我按回SecondActivity完成并且应用程序进入后台时。当我从最近的应用程序再次启动我的应用程序时,它显示FirstActivity,因为它的MAIN,LAUNCHER和DEFAULT是正确的。

在第二种情况下,收到通知后,我从通知下拉单击它并显示我的SecondActivity。当我按回SecondActivity完成并且应用程序进入后台时。当我从最近的应用程序再次启动我的应用程序时,它显示SecondActivity,这是错误的。我期待FirstActivity被展示,因为它应该是一个全新的开始。

我在第二种方案后尝试ForceKilling应用程序,但结果相同,我需要重新启动手机才能从FirstActivity再次启动。

你们遇到过同样的问题吗?还是仅仅是我?你认为我的配置有什么问题?

我也试着设置noHistory = false到SecondActivity,但结果仍然是一样的。

回答

0

对于您的主要活动,尝试在AndroidManifest文件中将lauch模式设置为“singleInstance”。对于第二个活动集“完成任务启动”为true。

+0

在main Activity中将clearTaskOnLaunch设置为true将是一个更好的主意。不需要以这种方式设置singleInstance。 – Rohit

+0

我刚刚尝试过,但无济于事。 – Macchiato

0

在第二种情况下,我认为应用程序关闭时,活动堆栈为空。所以现在你开始了activity2,这意味着这是堆栈中唯一的活动。现在想要的后退行为可以通过覆盖onbackpress来实现,并且如果第二种情况,则启动activity1。

+0

实际上,在第二种情况下,按下后退按钮时的预期结果是完成SecondActivity。但是当应用程序从启动程序或最近的应用程序启动时,它会显示返回SecondActivity。我希望它显示FirstActivity,因为我期待着一个新的开始。 – Macchiato

0

你可以叫你的第二个活动设置没有历史这样的标志,

intent1.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

这为我好几次工作。

阅读从Android Doc

+0

我可以知道投票的原因吗..如果投票人有任何理由? – MKJParekh

+0

我没有投票,但他在问题中说过:“我也尝试将SecondActivity设置为noHistory = false,但结果仍然相同。” – Robert

+0

@Robert yeh男人,我读了这个问题,但仍然给出了答案,因为这是我总是使用的解决方案..我做了一件事重写onPause,并在那里我打电话finish(),所以每当它在背景中它被销毁。 – MKJParekh

1

当你开始从“最近的应用程序”快捷应用程序,将推出最后一项活动。所以你可以尝试从应用程序列表中启动应用程序,看它是否解决了你的问题。

+0

感谢他解决了我的问题哈哈,而这一切都不是问题。我最近的应用程序列表中的快捷方式实际上是指向SecondActivity。 – Macchiato

1

这是正确的行为..如果您通过“最近的应用程序”启动应用程序,它将指向最后一个活动。 尝试通过正常的应用程序列表启动它

+0

是啊!感谢男子 – Macchiato

+0

+1感谢您的信息! – MKJParekh