当我升级到Android 8时,我的应用程序的某些功能出现了问题,即使没有明确针对API 26进行目标设置。特别是,检查服务是否正在运行的经典方法(如StackOverflow上记录的: How to check if a service is running on Android?)不再起作用。
只是为了提醒我们的共同记忆,这是一个经典的方法:
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
现在的问题是 getRunningServices
已经被弃用,不再返回正在运行的服务。有谁在 Android 8 上遇到过这个问题吗?是否有官方解决方案(或黑科技)可用?我还应该指出,我想要查找的 Service 不在 调用 isMyServiceRunning()
的代码所在的进程/应用程序中(出于向后兼容的原因仍提供此功能)
isMyServiceRunning()
的代码不在同一个进程中,也许我应该在我的问题中进行说明。 - Enrico CasiniisMyServiceRunning()
返回true
,你会怎么做?假设它返回false
,你会怎么做? - CommonsWareisMyServiceRunning
返回false
,但是服务在此期间已经启动了呢? - pskinkstartService
并通过Intent
的 extras 传递ResultReceiver
或Messenger
对象来轻松检查该状态,在Service#onStartCommand
中简单地响应当前状态。 - pskink