android - 如何检查 Android 应用程序是在前台、后台运行还是被杀死?(API 级别 27+)
问题描述
我的 Android 应用程序中有这个代码片段,用于检查应用程序是否被杀死。
static boolean isAppKilled(Context appContext) {
boolean appProcessRunning = false;
ActivityManager activityManager = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses != null) {
String packageName = appContext.getPackageName();
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
System.out.println("LM:appProcess: " + appProcess.processName);
System.out.println("LM:appProcess: " + appProcess.importance);
if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE &&
appProcess.processName.equals(packageName)) {
appProcessRunning = true;
break;
}
}
}
return appProcessRunning;
}
但是,这个片段也为后台的应用程序返回“true”,这不是有意的。
你们中的任何人都可以为我提供一个代码片段来满足上述所有情况吗?
解决方案
您可以LifecycleObserver
在您的类中实现接口Application
并实现生命周期方法:
class YourApp : Application, LifecycleObserver {
override fun onCreate() { ....}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onAppInForeground {
//do some logic to handle onForeground event.
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onAppInBackground {
//do some logic to handle onBackground event.
}
}
但是您需要将依赖项添加到您的 gradle 文件中:
// ProcessLifecycleOwner provides a lifecycle for the whole application process
implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")
有关更多信息,请查看链接: https ://developer.android.com/topic/libraries/architecture/lifecycle
推荐阅读
- arduino - Arduino 的命令行参数(Teensy)
- c# - 没有从剃须刀页面发送 Http Put
- java - 无法解析符号“GeoPoint”
- android - startVoiceRecognition 安全异常
- javascript - 当从选定项中删除和删除项目时,如何在反应选择中捕获添加和删除事件?
- python - 更改数据透视表中的列标题(在数据透视命令中)
- r - docker build 中缺少 R X13binary
- windows - 如何在 VB.NET 中编写 InProcServer32 .dll 文件
- javascript - Next.js 搜索/过滤表单
- angular - 如何测试服务模拟中可观察的变化?