我有一个应用程序,我运行了一个媒体播放器,我想从我的应用程序主页活动恢复活动。
我可以通过在startActivity Call中添加以下标志来成功完成此操作:
myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
我担心这不是理想的做事方式,因为我花了很长时间才找到它。这让我觉得没有人会非常使用它。
使用这种方法有什么缺陷吗?
答案 0 :(得分:13)
只是为了确保我正确理解你的问题:说你的活动堆栈就像A - > B - > C,现在从C你要清除堆栈并返回A。
如果这是你想要的,那么那些意图标志是正确的,并且按照Android-developer docs按预期工作。
答案 1 :(得分:7)
我知道这个问题年龄比较大,也许您已经解决了问题,并可能在那几年被送往火星并回去了,但是只是为了使来这里的人们清楚并寻求解释:
如果已设置,则该活动如果已在历史记录堆栈的顶部运行,则不会启动。
A-B-C-D
的BackStack,并且您已经启动了
另一个意图是从Activity A
开始,FLAG_ACTIVITY_CLEAR_TOP
此时,Android将要做的就是清除所有
Activity A
顶部的活动意味着现在您的BackStack将
看起来像-> A
(是的,因为您已经清除了所有
活动之上)。第三种情况,我们从相同的BackStack A-B-C-D
开始,然后
将启动一个以Activity D
为起点的Intent
FLAG_ACTIVITY_SINGLE_TOP
,现在我们的BackStack看起来像->
A-B-C-D
(是,BackStack保持相同的顺序,因为我们的
FLAG禁止启动“相同活动”(如果它是“当前在前”)
并显示在用户屏幕上。
最后一种情况,我们从相同的BackStack A-B-C-D
开始,我们将
启动一个Activity D
开头的Intent,但是这次没有FLAGS,
现在我们的BackStack看起来就像-> A-B-C-D-D
。
知道了吗?
FLAG_ACTIVITY_SINGLE_TOP
仅在您 开始当前在屏幕上显示的同一活动 并且您要禁止启动现有活动的新实例。