想要在后台应用时隐藏Android吐司

时间:2011-01-20 02:57:00

标签: android toast

如果我的应用程序活动不在前台时发出祝酒词,那么祝酒词仍会显示在屏幕上。当我的应用程序在后台运行时,如何防止我的toast出现。即,目前没有任何活动显示活动。

我想我必须以某种方式检测到我的活动不是当前正在展示的活动,而且当真实时没有发出任何祝酒词;但我怎么能发现这种情况呢?

由于

3 个答案:

答案 0 :(得分:9)

当你的应用在后台时(例如在onPause中)设置一个标志,如果设置了标志,则不发送祝酒词。

如果您有大量活动,可以定义自己的Activity基类来包装此功能。

答案 1 :(得分:2)

您是否尝试在为该活动调用onPause()方法时设置变量或某个指标,以表示已将其放入后台,然后在调用onResume()时关闭该指标?

如果指示灯熄灭,则让吐司出现。

答案 2 :(得分:0)

在我的应用程序中,当应用程序进入后台时,排队的多士一次又一次出现,所以我按照以下方式解决了问题。

添加代码以检测应用何时进入后台。注册生命周期处理程序的一种方法。详情请参阅ref

registerActivityLifecycleCallbacks(new MyLifecycleHandler());
当应用程序转到后台并使用SmartToast类显示吐司时

App.inBackground = true;

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();
    }

}
当app进入后台以隐藏当前和所有待处理状态时,

调用SmartToast.cancelAll();方法。代码很有趣。享受!