Есть несколько способов выполнить sh это, в зависимости от требований вашего приложения. Вы должны использовать startActivityForResult()
, чтобы запустить одно (или несколько) действий, которые затем могут вернуть результат в Activity
, который его запустил. Это может быть хорошим решением для вас.
Другой альтернативой является использование вашего ActivityA
в качестве своего рода диспетчера. В этом случае, когда C
хочет запустить D
, но также очистить сначала стек задач обратно в A
, вы можете сделать что-то вроде этого в C
:
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("launchActivity", "ActivityD");
Использование флагов CLEAR_TOP
и SINGLE_TOP
приведет к тому, что все действия будут выполняться поверх существующего экземпляра ActivityA
должен быть завершен, и Intent
будет перенаправлен на onNewIntent()
существующего экземпляра ActivityA
.
Теперь, в ActivityA
, замените onNewIntent()
примерно таким:
if (intent.hasExtra("launchActivity)) {
if (intent.getExtra("launchActivity").equals("ActivityD")) {
Intent launchIntent = new Intent(this, ActivityD.class);
startActivity(launchIntent);
} else ...
}