首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何判断Android应用是否在前台运行?

如何判断Android应用是否在前台运行?
EN

Stack Overflow用户
提问于 2011-04-01 02:36:33
回答 18查看 79.1K关注 0票数 83

我正在我的安卓应用程序中执行由c2dm触发的状态栏通知。如果应用程序正在运行,我不想显示通知。如何确定应用程序是否正在运行以及是否处于前台?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2011-04-01 02:43:53

创建一个全局变量,如private boolean mIsInForegroundMode;,并在onPause()中分配一个false值,在onResume()中分配一个true值。

示例代码:

代码语言:javascript
复制
private boolean mIsInForegroundMode;

@Override
protected void onPause() {
    super.onPause();
    mIsInForegroundMode = false;
}

@Override
protected void onResume() {
    super.onResume();
    mIsInForegroundMode = true;
}

// Some function.
public boolean isInForeground() {
    return mIsInForegroundMode;
}
票数 55
EN

Stack Overflow用户

发布于 2012-06-14 18:03:44

或者,您可以通过getRunningTasks方法使用ActivityManager检查哪些任务正在运行。然后检查返回的任务列表中的第一个任务(前台的任务),如果它是您的任务。

以下是代码示例:

代码语言:javascript
复制
public Notification buildNotification(String arg0, Map<String, String> arg1) {

    ActivityManager activityManager = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> services = activityManager
            .getRunningTasks(Integer.MAX_VALUE);
    boolean isActivityFound = false;

    if (services.get(0).topActivity.getPackageName().toString()
            .equalsIgnoreCase(appContext.getPackageName().toString())) {
        isActivityFound = true;
    }

    if (isActivityFound) {
        return null;
    } else {
        // write your code to build a notification.
        // return the notification you built here
    }

}

并且不要忘记在manifest.xml文件中添加GET_TASKS权限,以便能够在上面的代码中运行getRunningTasks()方法:

代码语言:javascript
复制
<uses-permission android:name="android.permission.GET_TASKS" />

p/s :如果同意这样做,请注意此权限现在已被弃用。

票数 112
EN

Stack Overflow用户

发布于 2014-10-31 04:27:42

这是一个相当古老的帖子,但仍然非常相关。上述被接受的解决方案可能有效,但是错误的。As Dianne Hackborn wrote:

这些API不是应用程序的UI流的基础,而是做一些事情,比如向用户显示正在运行的应用程序,或者任务管理器,等等。

是的,在内存中有一个关于这些东西的列表。然而,它是在另一个进程中关闭的,由独立于您的进程运行的线程管理,并且您不能指望(a)及时看到做出正确的决定或(b)在您返回时有一个一致的画面。另外,关于“下一个”活动的决定总是在发生切换的时候完成,直到那个确切的点(活动状态被短暂锁定以进行切换),我们才真正知道下一件事将是什么。

这里的实现和全局行为不能保证在未来保持不变。

正确的解决方案是实现:ActivityLifeCycleCallbacks

这基本上需要一个应用程序类,可以在其中设置处理程序来识别应用程序中活动的状态。

票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5504632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档