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