事实证明,只有当 Activity 从使用以下代码编写的菜单启动时才会出现此问题:
private static final int MENU_ITEM_A = 0;
private static final int MENU_ITEM_B = 1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_ITEM_A, 0, R.string.menu_item_a);
menu.add(0, MENU_ITEM_B, 0, R.string.menu_item_b);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
intent = null;
switch (item.getItemId()) {
case MENU_ITEM_A:
intent = new Intent(this, ActivityA.class);
break;
case MENU_ITEM_B:
intent = new Intent(this, ActivityB.class);
break;
default:
intent = null;
Log.e(TAG, "Unkown menu item.");
}
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent,
ActivityHelper.AUTO_CLOSE_REQUEST_CODE);
}
return super.onOptionsItemSelected(item);
}
这是字符串资源
<string name="menu_item_a">Start Activity A</string>
<string name="menu_item_b">Start Activity B</string>
只需将此代码添加到来自 inazaruk 的代码示例中的基本 Activity 即可亲自查看。通过菜单在 Activity A 和 Activity B 之间切换几次,然后尝试关闭堆栈中的所有 Activity。不起作用。
现在有人会认为原因是意图标志:
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
但是,将这个标志添加到来自 inazaruk 的代码中的所有意图中排除了这一点。
如果有人能准确地解释发生了什么,那就太好了。