【发布时间】:2013-08-16 00:45:12
【问题描述】:
我从活动 A->B->C->D->E 开始。当我从 D->E 开始时,堆栈中应该没有活动,但是,用户可以使用 D 中的后退按钮并转到C(不刷新Activity C,和正常的返回功能一样)
【问题讨论】:
标签: android android-intent android-activity back-stack
我从活动 A->B->C->D->E 开始。当我从 D->E 开始时,堆栈中应该没有活动,但是,用户可以使用 D 中的后退按钮并转到C(不刷新Activity C,和正常的返回功能一样)
【问题讨论】:
标签: android android-intent android-activity back-stack
您可以在所有要关闭的活动(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。
【讨论】:
添加标志 FLAG_ACTIVITY_CLEAR_TOP 到您的意图中,以在您启动 E Activity 时清除其他活动表单返回堆栈,例如:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
然后开始你的活动:
startActivity(intent)
更多信息:Task and BackStack
【讨论】:
向您的项目添加标志,它将清除堆栈中的所有活动
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这是清除堆栈中已经存在的活动的正确方法
希望这会有所帮助..
【讨论】: