题
如果当我的应用程序的活动不在前景时,我会发出吐司,那么吐司仍会出现在屏幕上。当我的应用程序在后台运行时,我如何防止吐司出现。即目前没有展示活动的活动。
我认为我必须以某种方式检测到我的活动不是当前正在显示的活动,而当正确的时候不发出任何敬酒。但是我将如何检测到这种情况?
谢谢
解决方案
当您的应用在后台时设置标志(即 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();
当应用进入后台以隐藏当前和所有未决的吐司时,方法。代码很有趣。享受!
不隶属于 StackOverflow