Лучший способ справиться с этим - использовать
startActivityForResult(intent, int);
Наряду с переопределением вашей деятельности
protected void onActivityResult (int requestCode, int resultCode, Intent data)
Всякий раз, когда вы заканчиваете свою деятельность, вам нужно установить результат для определенного кода:
public final void setResult (int resultCode)
Когда действие заканчивается, вызов onActivityResult предыдущего действия будет вызываться с переданным кодом результата. Здесь вы можете проверить код результата и код запроса, а затем выполнить действие. В этом случае вы захотите выполнять всплывающее каскадное действие, пока не достигнете первого действия в списке. Затем вы можете установить результат для этого предыдущего действия и завершить его, после чего будет активировано onActivityResult следующего действия. Затем вы можете делать это, пока не достигнете «первого» действия в вашем стеке действий.
Этот метод также гибок, поскольку позволяет вам условно переходить к определенным точкам стека активности в зависимости от того, как вы обрабатываете код запроса и код результата.