Когда я хочу сохранить иерархию после принудительного закрытия, я обхожу стек операций, заменяя каждое действие на вызываемое, а затем перезаписываю событие back, чтобы сделать то же самое в обратном порядке.
В ActivityL.java, куда вы хотите перейти в ActivityA:
Intent intent = new Intent(getApplicationContext(), ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
Теперь у вас есть только одно действие в стеке - ActivityA. Чтобы кнопка «Назад» работала правильно и вернула вас в ActivityL, добавьте это в ActivityA:
@Override
public void onBackPressed () {
Intent intent = new Intent(getApplicationContext(), ActivityL.class)
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
Вам по-прежнему нужно будет хранить достаточно информации о состоянии, чтобы вернуться к той деятельности, где пользователь находился до закрытия. В onCreate for ActivityL проверьте информацию о состоянии, чтобы определить, в каком представлении вы хотите, чтобы пользователь был включен, и используйте код, аналогичный первому блоку выше, чтобы перейти непосредственно туда.
Это кажется мне чище, чем перестраивать весь стек действий при запуске. Это, однако, становится более сложным, если ваши действия не следуют строгой иерархии. (то есть иногда действие A начинает действие B, а иногда оно начинает действие C).