Оказалось, что эта проблема появилась, только если действие было запущено из меню, написанного со следующим кодом:
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, чтобы убедиться в этом. Несколько раз переключитесь между действием A и действием B через меню, а затем попытайтесь закрыть все объекты в стеке. Это не сработает.
Теперь можно подумать, что причиной был флаг намерения:
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
Однако добавление этого флага ко всем намерениям в коде из inazaruk исключает это.
Если кто-нибудь может точно объяснить, что происходит, было бы здорово услышать.