В моем приложении тосты в очереди появляются снова и снова, когда приложение переходит в фоновый режим, поэтому я сделал следующее, чтобы решить проблему.
Добавьте код, чтобы определить, когда приложение переходит в фоновый режим.Один из способов зарегистрировать обработчик жизненного цикла.Подробнее ref
registerActivityLifecycleCallbacks(new MyLifecycleHandler());
App.inBackground = true;
, когда приложение переходит в фоновый режим и показывать тосты, используя класс SmartToast
public class SmartToast {
static ArrayList<WeakReference<Toast>> toasts = new ArrayList<>();
public static void showToast(@NonNull Context context,@NonNull String message){
//this will not allowed to show toast when app in background
if(App.inBackground) return;
Toast toast = Toast.makeText(context,message,Toast.LENGTH_SHORT);
toasts.add(new WeakReference<>(toast));
toast.show();
//clean up WeakReference objects itself
ArrayList<WeakReference<Toast>> nullToasts = new ArrayList<>();
for (WeakReference<Toast> weakToast : toasts) {
if(weakToast.get() == null) nullToasts.add(weakToast);
}
toasts.remove(nullToasts);
}
public static void cancelAll(){
for (WeakReference<Toast> weakToast : toasts) {
if(weakToast.get() != null) weakToast.get().cancel();
}
toasts.clear();
}
}
, вызывать метод SmartToast.cancelAll();
, когда приложение выходитв фоновом режиме, чтобы скрыть текущие и все ожидающие тосты.Код это весело.Наслаждайтесь!