我从活动A-> B-> C-> D-> E开始..当我从D-> E开始时,堆栈中应该没有活动但是,用户可以使用后退按钮从D开始转到C(没有刷新活动C,就像正常的后退功能一样)
答案 0 :(得分:17)
您可以在要关闭的所有活动中添加BroadcastReceiver
(A,B,C,D):
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。
答案 1 :(得分:5)
在您启动E活动时,将标志 FLAG_ACTIVITY_CLEAR_TOP 添加到您打算清除其他活动表格的目的,例如:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
然后开始您的活动:
startActivity(intent)
有关以下内容的更多信息:Task and BackStack
答案 2 :(得分:0)
向你的itent添加标志,它将清除堆栈中的所有活动
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这是清除已经在堆栈中的活动的正确选择
希望这会有所帮助..