如何检查Android应用程序是在后台还是前台或终止?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查Android应用程序是在后台还是前台或终止?相关的知识,希望对你有一定的参考价值。

我想检查我的应用程序状态,现在很容易我使用下面的代码在后台或前台获取我的应用程序,但我不知道如何检查应用程序被杀或终止任何人都可以帮助解决此问题。使用下面的代码,我在后台或前台检查应用程序。

public static boolean isAppIsInBackground(Context context) {
        boolean isInBackground = true;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    for (String activeProcess : processInfo.pkgList) {
                        if (activeProcess.equals(context.getPackageName())) {
                            isInBackground = false;
                        }
                    }
                }
            }
        } else {
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;
            if (componentInfo.getPackageName().equals(context.getPackageName())) {
                isInBackground = false;
            }
        }
        return isInBackground;
    }
答案

这是完美的代码并检查onStop方法

private boolean isAppIsInBackground(Context context) {
    boolean isInBackground = true;
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList) {
                    if (activeProcess.equals(context.getPackageName())) {
                        isInBackground = false;
                    }
                }
            }
        }
    } else {
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
        if (componentInfo.getPackageName().equals(context.getPackageName())) {
            isInBackground = false;
        }
    }
    return isInBackground;
}
另一答案

如果您的minSDK是14+,则普遍的共识似乎是在实现ActivityLifecycleCallbacks(https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html)的类中使用计数器。有一个YouTube视频,描述了Firebase如何使用这种技术here

以上是关于如何检查Android应用程序是在后台还是前台或终止?的主要内容,如果未能解决你的问题,请参考以下文章

iOS如何判断应用程序是在前台运行还是后台运行?

Android判断应用在前台还是后台运行(判断应用前后台切换)

Android判断应用在前台还是后台运行(判断应用前后台切换)

检查应用程序是不是正在运行(后台或前台)Android

快速检测应用程序是在后台还是前台

java 检查Android App的后台/前台状态