2011-01-11 47 views
4

如果设备内存不足,是否有人知道是否有可能将活动从活动堆栈中移除?我有一个调用web浏览器,然后网页调用的活动B的做一些事情,然后在使用此意图用标志返回到行动A.我是一位活性的..如何返回活动堆栈中某个活动?

Intent intent = new Intent(this, acticityToReturnTo.getClass()); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

..to删除网页浏览器活动和活动B从活动堆栈返回到活动A但它不起作用。它总是一个活动A的新实例,它被创建,而是恢复到已经存在的活动实例。 我不想在活动A上使用单实例标志,但这是目前唯一的解决方案..(Im开发Android 1.6)

也许有另一种解决方案来做我想做的?

回答

2

只是尝试使用

startActivityForResult(intent);

而不是

startActivity(intent);

+0

hm没有改变任何东西对我来说:/我敢打赌,因为网页浏览器的活动。 – 2011-01-15 14:22:32

0

如果导航始终是A-> B-> A,你可以只需拨打活动B finish(),它会返回活性的

+0

不,导航是A->外部浏览器 - > B-> A,我认为这个问题是我不能从活动堆栈中删除extermal webbrowser活动 – 2011-01-15 14:18:33

0

包括网络浏览和活动A在相同的任务?您可以在控制台中输入adb shell dumpsys activity进行检查。

+0

我使用普通的uri intent来启动非标准web浏览器,所以浏览器不能在同一个任务中。这是否重要? – 2011-01-15 14:20:42

1

我更愿意考虑它的原因是为什么它重新启动活动A的问题,因为活动A或B可能会在您的操作过程中的任何时候被杀死。

当然,最好让它可以返回到活动A,无论您是重新启动它还是从头开始重新创建它,因为不能保证这不会发生。

+0

我认为你是对的这不是一个好的设计,我现在改变它,但它应该与FLAG_ACTIVITY_CLEAR_TOP标志一起工作,我认为这将节省资源重用现有的活动(如果它仍然存在) – 2011-01-15 14:25:16