Это архитектурный вопрос.
1) Предположим, у нас есть 2 контроллера (фрагменты / действия): контроллер A и контроллер B.
Они оба подключены к одному экземпляру некоторой модели (вы можете использовать привязку со службой, шаблон Singleton или модель init в классе Application-heir и создать для него метод получения).
Когда в контроллере B происходит что-то интересное, он уведомляет об этом модель, а затем модель вызывает controllerA.finish () / controllerA.remove ().
Конечно, я всегда стараюсь реализовать это решение как можно лучше, но есть основная идея.
2) При других обстоятельствах я вызываю finish () сразу после startActivity (намерение);
3) Также я могу написать: startActivityForResult (intent, requestCode) и после завершения второго действия вызывается метод onActivityResult (requestCode, responseCode, intent) - если requestCode равны, я завершаю действие.