Хотите скрыть Android-тост, когда приложение в фоновом режиме - PullRequest
6 голосов
/ 20 января 2011

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

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

Спасибо

Ответы [ 3 ]

9 голосов
/ 20 января 2011

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

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

2 голосов
/ 20 января 2011

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

Тогда пусть этот тост произойдет, если индикатор не горит.

0 голосов
/ 14 декабря 2016

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

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

...