如果当我的应用程序的活动不在前景时,我会发出吐司,那么吐司仍会出现在屏幕上。当我的应用程序在后台运行时,我如何防止吐司出现。即目前没有展示活动的活动。

我认为我必须以某种方式检测到我的活动不是当前正在显示的活动,而当正确的时候不发出任何敬酒。但是我将如何检测到这种情况?

谢谢

有帮助吗?

解决方案

当您的应用在后台时设置标志(即 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