Activity A -> Activity B -> Activity C -> Activity D
. 在 Activity D 中按下 back 应该将用户导航出应用程序,而 Back 应该对于 Activity C、B 和 A 正常工作。即C -> back -> B -> back A -> back -> exit
。
我尝试Activity.FLAG_ACITIVITY_CLEAR_TOP,
使用不同的组合设置标志等。似乎没有任何效果。最低 API 级别 7。
Activity A -> Activity B -> Activity C -> Activity D
. 在 Activity D 中按下 back 应该将用户导航出应用程序,而 Back 应该对于 Activity C、B 和 A 正常工作。即C -> back -> B -> back A -> back -> exit
。
我尝试Activity.FLAG_ACITIVITY_CLEAR_TOP,
使用不同的组合设置标志等。似乎没有任何效果。最低 API 级别 7。
为了#1 Pressing back in Activity D should navigate user out of the application
在 ActivityD 中,您可以覆盖 onBackPressed 或 onKeyDown 方法,然后使用带有 Exit 标志的标志 FLAG_ACTIVITY_CLEAR_TOP 启动 ActivityA(通过 putExtra 方法)。在 ActivityA 中,如果 Exit 标志设置为 true,您可以获得该 Exit 标志值并调用 finish()。
在活动 A 的 onCreate 方法中,您必须做的是
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
在 ActivityD 的 onBackPressed 或 onKeyPressed 方法中,
intent = (this, ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
为了#2 Exit from ActivityA
您可以简单地在 onBackPressed 或 onKeyPressed 上调用 finish() 方法。
Android 活动存储在活动堆栈中。回到以前的活动可能意味着两件事。
您使用 startActivityForResult 从另一个活动中打开了新活动。在这种情况下,您只需从代码中调用 finishActivity() 函数,它就会带您回到上一个活动。
跟踪活动堆栈。每当您使用一个意图启动一个新活动时,您都可以指定一个意图标志,如 FLAG_ACTIVITY_REORDER_TO_FRONT 或 FLAG_ACTIVITY_PREVIOUS_IS_TOP。您可以使用它在应用程序中的活动之间随机播放。不过没怎么用过。看看这里的标志
您是否尝试过在 Activity D 中覆盖 BACK 按钮的功能?我很确定这与您需要的非常相关:覆盖后退按钮以充当主页按钮
了解 Android 活动生命周期。
“在 Activity D 中按回应该将用户导航出应用程序”
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
这是操作系统的正常行为,你不必为它做任何特别的事情。