如何使 Toast 仅在应用程序位于前台时才出现?

2024-03-31

我有一个Toast这是从内部调用的Service。 按照设计,无论应用程序的状态如何,它总是会出现。

如何让它仅当我的应用程序位于前台时出现,而不是当其他应用程序位于前台时出现?也就是说,无需将其移动到Activity code.


mparaz,

有多种方法可以轻松地完成您想做的事情。在此之前,我想解决您问题中的一个非常重要的缺陷。应用程序不是活动,活动也不是应用程序。因此,应用程序不能位于前台或后台。这是仅为活动保留的。

一个简单的例子,然后给你答案。您的服务是您的应用程序的一部分。应用程序已加载,但活动未加载。如果您的应用程序未加载,您的服务将无法运行。我之所以强调这一点,是因为它是 Android 中的一个重要哲学,理解这些术语的正确使用以及定义它们的概念将使您将来变得更加容易。

一个简单的解决方案

您可以扩展应用程序对象并在类中保留一个简单的公共标志。然后,您可以在 Activity 进入后台时将该标志设置为 false,而在进入前台时将该标志设置为 true(当然反之亦然)。

扩展应用程序:

public class MyApplication extends Application
{
    static public boolean uiInForeground = false;
}

设置标志:在您的活动中...

//This may be done in onStart(), onResume(), onCreate()... 
//... whereever you decide it is important. 
//Note: The functions here do not include parameters (that's Eclipse's job).
public void onStart()
{//Notice the static call (no instance needed)
    MyApplication.uiInForeground = true;
}

public void onPause()
{
    MyApplication.uiInForeground = false;
}

在您的服务中(您称之为 Toast 的地方)

    if (MyApplication.uiInForeground)
        Toast.makeText(someContext, myMsg).show();

真的就是这么简单。哦是的...不要忘记告诉清单您正在扩展应用程序。对于 AndroidManifest.xml 中的应用程序声明

<application android:name=".MyApplication" .... >
   <!-- All other components -->
</application>

希望这可以帮助,

模糊逻辑

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 Toast 仅在应用程序位于前台时才出现? 的相关文章

随机推荐