Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测android应用程序是否在后台运行_Android - Fatal编程技术网

检测android应用程序是否在后台运行

检测android应用程序是否在后台运行,android,Android,我想检查我的应用程序是否在后台模式下运行 问题是我有很多活动(列出活动、映射活动等)。最初,我在生命周期的resume和pause(或onUserLeaveHint)方法中尝试将静态布尔值设置为true或false,并以这种方式工作。但这显然不起作用,因为当我从一个活动转到另一个活动时,前一个活动会暂停 另外,我在stackoverflow上读到,getRunningTasks()仅用于调试目的。我做了大量的研究,但找不到解决办法。我想做的就是能够检测应用程序是否在后台运行。有人能给我提出一种方

我想检查我的应用程序是否在后台模式下运行

问题是我有很多活动(列出活动、映射活动等)。最初,我在生命周期的resume和pause(或
onUserLeaveHint
)方法中尝试将静态布尔值设置为true或false,并以这种方式工作。但这显然不起作用,因为当我从一个活动转到另一个活动时,前一个活动会暂停


另外,我在stackoverflow上读到,
getRunningTasks()
仅用于调试目的。我做了大量的研究,但找不到解决办法。我想做的就是能够检测应用程序是否在后台运行。有人能给我提出一种方法,或者表达我对如何做到这一点的想法吗?

您可以尝试相同的机制(布尔属性),但在应用程序端而不是活动端。创建一个扩展
应用程序的类,在
下的清单文件中声明它


编辑:我假设您知道
活动
不用于后台处理,如果不是,您应该查看
服务

我不知道这是否有用,但您可以使用

getApplicaton().registerActivityLifecycleCallbacks(

以鸟瞰您的活动在前景中的显示方式。(适用于较老的s/w您)


如果您的应用程序有一个服务,那么您可以有一个访问静态变量的静态get/set。但不要在活动中执行此操作,否则会导致mem泄漏


但实际上,没有一种整洁的方法可以跟踪应用程序是否正在运行

我在重写Firebase推送消息默认行为(仅在后台显示通知)时遇到了相同的问题。我通过查看.class文件com.google.Firebase.messaging.zzb:53(Firebase消息:19.0.1)检查了Firebase是如何做到这一点的,该文件在我们看来是GetRunningAppProcess。请注意,FireBase是由Google自己创建的。所以我认为这是非常节省使用。已清理版本:

List<ActivityManager.RunningAppProcessInfo> runningApps;            
boolean isInForeground =false;
        if ((runningApps = ((ActivityManager)this.getApplication().getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses()) != null) {
            Iterator runningApp = runningApps.iterator();
            int myPid = Process.myPid();
            while(runningApp.hasNext()) {
                ActivityManager.RunningAppProcessInfo processInfo;
                if ((processInfo = (ActivityManager.RunningAppProcessInfo)runningApp.next()).pid == myPid) {
                    isInForeground = processInfo.importance == 100;
                    break;
                }
            }
        }
列出运行的应用程序;
布尔ISINFORGROUND=false;
if((runningApps=((ActivityManager)this.getApplication().getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses())!=null){
迭代器runningApp=runningApps.Iterator();
int myPid=Process.myPid();
while(runningApp.hasNext()){
ActivityManager.RunningAppProcessInfo processInfo;
if((processInfo=(ActivityManager.RunningAppProcessInfo)runningApp.next()).pid==myPid){
ISINFORGROUND=processInfo.importance==100;
打破
}
}
}