Хотите скрыть тост для Android, когда приложение в фоне

StackOverflow https://stackoverflow.com/questions/4743031

  •  13-10-2019
  •  | 
  •  

Вопрос

Если я выпускаю тост, когда деятельность моего приложения не будет на переднем плане, то тост все равно будет отображаться на экране. Как я могу предотвратить появление моего тоста, когда мое приложение работает в фоновом режиме. т.е. ни в одной из его деятельности в настоящее время проявляется деятельность.

Я думаю, что я должен каким -то образом обнаружить, что моя деятельность не является деятельностью, которая в настоящее время показывается, и когда истинно не выпускают какие -либо тосты; Но как бы я обнаружил это состояние?

Спасибо

Это было полезно?

Решение

Установите флаг, когда ваше приложение находится в фоновом режиме (т.е. onPause), и не отправляйте тосты, если флаг установлен.

Если у вас есть множество действий, вы можете определить свой собственный Activity базовый класс, который завершает эту функциональность.

Другие советы

Вы пробовали установить переменную или какой -то индикатор, когда onPause() Метод требуется, чтобы это действие обозначало его в фоновом режиме, а затем выключите этот показатель, когда onResume() называется?

Затем пусть это тост возникает, если индикатор выключен.

В моем приложении яростные тосты появляются снова и снова, когда приложение вступает в фон, поэтому я следил за решением проблемы.

Добавьте код, чтобы обнаружить, когда приложение входит в фон. Один из способов зарегистрировать обработчик жизненного цикла. Для более подробной информации рефери

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(); Метод, когда приложение входит в фон, чтобы скрыть текущие и все ожидающие тосты. Код - это весело. Наслаждаться!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top