清除活动回栈[重复]
Posted
技术标签:
【中文标题】清除活动回栈[重复]【英文标题】:Clear Activity back stack [duplicate] 【发布时间】:2013-08-16 00:45:12 【问题描述】:我从活动 A->B->C->D->E 开始。当我从 D->E 开始时,堆栈中应该没有活动,但是,用户可以使用 D 中的后退按钮并转到C(不刷新Activity C,和正常的返回功能一样)
【问题讨论】:
【参考方案1】:您可以在所有要关闭的活动(A、B、C、D)中添加BroadcastReceiver
:
public class MyActivity extends Activity
private FinishReceiver finishReceiver;
private static final String ACTION_FINISH =
"com.mypackage.MyActivity.ACTION_FINISH";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
finishReceiver= new FinishReceiver();
registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH));
@Override
protected void onDestroy()
super.onDestroy();
unregisterReceiver(finishReceiver);
private final class FinishReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
if (intent.getAction().equals(ACTION_FINISH))
finish();
...并通过调用...关闭它们
sendBroadcast(new Intent(ACTION_FINISH));
...在活动 E 中。也检查 this nice example。
【讨论】:
你是一个救生员......非常感谢...... :) 不幸的是,在这个问题上有太多接近投票者,尽管它与提到的副本略有不同。上面的解决方案可能看起来过大,但是,它非常灵活和强大:) 感谢分享解决方案。这种情况肯定是不同的,新的activity之前没有在back stack中。 这是一个很棒的解决方案。比其他的更强大、更清晰。【参考方案2】:添加标志 FLAG_ACTIVITY_CLEAR_TOP 到您的意图中,以在您启动 E Activity 时清除其他活动表单返回堆栈,例如:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
然后开始你的活动:
startActivity(intent)
更多信息:Task and BackStack
【讨论】:
但这只有在 Activity 已经在堆栈中时才有效 @sabya : 请解释一下你的问题,有点不清楚 来自文档:“如果设置,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是在它之上的所有其他活动被关闭,这个 Intent 将作为一个新的 Intent 传递给(现在在最上面的)旧活动。” (见developer.android.com/reference/android/content/Intent.html) @Arash:我从活动 A 开始,然后移动到活动 B,然后是 C、D,然后我从活动 D 移动到活动 E。但是当用户从 E 单击后退按钮时,应该没有活动在堆栈中。 @sabya : 如果你的活动在相同的任务中,所以这个标志应该清除你的后台堆栈,只需在你开始最后一个活动之前添加这个标志【参考方案3】:向您的项目添加标志,它将清除堆栈中的所有活动
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这是清除堆栈中已经存在的活动的正确方法
希望这会有所帮助..
【讨论】:
也不工作... :(以上是关于清除活动回栈[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android中维护标准应用Activity回栈状态(使用singleTask启动模式)