2011-01-20 26 views
6

如果我发出了一个敬酒时,我的应用程序的活动是不是在前台则举杯仍然会显示在屏幕上。当我的应用在后台运行时,如何防止我的敬酒显示出来。即目前没有其活动显示出来。想隐藏的Android敬酒时,应用程序在后台

我想,我必须以某种方式检测到我的活动没有被显示的活性,当真正的不发出任何祝酒词;但我如何检测这种情况?

感谢

回答

9

设置当您的应用程序在后台运行(在即)一个标志,如果设置了标志,不发出祝酒。

如果你有很多活动,你可以定义你自己的Activity基类,它包装了这个功能。

+0

+1拉去4秒;) – 2011-01-20 03:05:17

2

您是否尝试过设置一个变量或一些指示灯,当onPause()方法被调用该活动以表示其已投入的背景下,然后打开该指示灯熄灭时onResume()叫?

然后让如果所述指示符是关闭该烤面包发生。

+1

+1 ......没有错,是第二位:) – EboMike 2011-01-20 03:12:30

0

在我的应用程序中,当应用程序进入后台时,排队等待的敬酒一次又一次出现,所以我没有按照以下方式解决问题。当应用程序进入后台检测

添加代码。注册生命周期处理程序的一种方法。对于更多细节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();方法显示敬酒。代码很有趣。请享用!