Завершить работу из другого вида деятельности

У меня есть 3 действия A, B и C. A ведет к B, что приводит к C. Я хотел бы иметь возможность двигаться вперед и назад между A и B, но я хочу закончить как A, так и B, когда C начнется, Я понимаю, как закрыть B при запуске C с помощью намерения, но как я также закрываю A при запуске C?

Ответ 1

В методе onCreate() присвойте статическому экземпляру переменной для создания Singleton:

public static ActivityA instance = null;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance = this;
}

@Override
public void finish() {
    super.finish();
    instance = null;
}

то в C:

public void onCreate(Bundle savedInstanceState) {
    if(ActivityA.instance != null) {
        try {  
            ActivityA.instance.finish(); 
        } catch (Exception e) {}
    }
}

(Повторите выше код для B, а также A)

Я бы сказал, что это НЕ элегантно и обязано вводить странные ошибки жизненного цикла.

Было бы лучше, если бы вы могли настроить свое требование - если вы не можете использовать одну активность и изменить A, B и C на Fragments?

Я бы предложил широковещательную рассылку, но, как я понимаю, у вас не может быть приемников широковещательных сообщений на уровне "без возобновления".

Использование Service для привязки к действиям кажется излишним - но вы можете подумать, что если приведенное выше не работает.

Удачи!

Ответ 2

((Activity)context_of_another_activity).finish();

Ответ 3

Когда вы запустите C из B, сделайте это следующим образом:

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Теперь начинается C, но A и B ушли.

Однако, я думаю, что лучше, если вы можете переосмыслить свой дизайн таким образом, чтобы C не зависел от завершения A или нет.