В вашем подходе вы пытаетесь вызвать фоновое событие в onStop()
и пытаетесь вызвать super.onStop () после выполнения фоновой работы.
Есть несколько вещей, которые делают этот подходнедопустимый
onStop()
метод может использоваться для запуска фонового события, но мы не можем заставить метод onStop()
ждать, пока фоновая работа не будет выполнена. Это относится ко всем методам жизненного цикла. - Нельзя использовать
onStop()
, поскольку метод onStop вызывается всякий раз, когда пользовательский интерфейс невидим для пользователя, это может происходить во многих случаях, кроме выхода из операции.
Решение
В идеале, чтобы выполнить некоторую работу при выходе из действия, вы можете использовать метод ViewModel onCleared()
, но поскольку вы не используете ViewModels, другойопция onDestroy()
.
@Override
protected void onDestroy() {
super.onDestroy();
db.collection("ABC").document("123").delete().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
db.collection("XYZ").document("123").delete().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
}
});
}
});
}
Поскольку мы используем onDestroy()
, мы не можем ждать, пока будет выполнена фоновая работа, и есть еще одна проблема, которая не гарантированно вызывается onDestroy
. В некоторых случаях onDestroy () не будет вызываться при завершении активности.
Я бы предпочел использовать метод onCleared()
ViewModel вместо onDestroy()
, потому что onDestroy будет вызываться даже при изменении ориентации,что не идеально.