如果我的应用程序活动不在前台时发出祝酒词,那么祝酒词仍会显示在屏幕上。当我的应用程序在后台运行时,如何防止我的toast出现。即,目前没有任何活动显示活动。
我想我必须以某种方式检测到我的活动不是当前正在展示的活动,而且当真实时没有发出任何祝酒词;但我怎么能发现这种情况呢?
由于
答案 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();
方法。代码很有趣。享受!