我从活动 A->B->C->D->E 开始。当我从 D->E 开始时,堆栈中应该没有活动,但是,用户可以使用 D 中的后退按钮并转到 C(没有刷新Activity C,像正常的返回功能)
问问题
7473 次
3 回答
17
您可以BroadcastReceiver
在要关闭的所有活动(A、B、C、D)中添加 a:
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 中。也检查这个很好的例子。
于 2013-08-14T08:04:30.017 回答
5
将标志FLAG_ACTIVITY_CLEAR_TOP添加到您的意图中,以在您启动 E 活动时清除其他活动表单返回堆栈,例如:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
然后开始你的活动:
startActivity(intent)
更多信息:Task 和 BackStack
于 2013-08-14T07:15:31.720 回答
0
向您的项目添加标志,它将清除堆栈中的所有活动
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这是清除堆栈中已经存在的活动的正确方法
希望这可以帮助..
于 2013-08-14T07:33:41.860 回答