我想知道MyService.java
是否有效?
private boolean isServiceAlive(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
它工作正常,但是从API 26中弃用了manager.getRunningServices()
。那么我们还有另一个很好的解决方案(方法)来获取当前正在运行的服务列表吗?
答案 0 :(得分:1)
这是你做的。如果您使用的服务在您自己的应用程序中,只需创建一个具有启动或停止的布尔变量的单例。服务启动时,请确保更新该变量。
public class SingletonServiceManager {
public static boolean isMyServiceRunning = false;
}
以上是我用于小型单件类的所有内容,稍后在其他类中,您想知道该服务是否正在运行...
if(SingletonServiceManager.isMyServiceRunning == true){
// do something
}
您只需管理此值的更新位置和时间。例如,在启动服务(服务内部)时将其设置为true。然后,在停止服务时(从服务内部)将布尔值更新为false
答案 1 :(得分:1)
欢迎使用Android O
android Oreo的另一个烦人的bug,只有 Deprecated 批注,没有其他方法可以做到。但也许在过去,Android开发人员决定创建替代功能。
就目前Document说,继续使用getRunningServices
从Build.VERSION_CODES.O开始,此方法对第三方应用程序不再可用。 为了向后兼容,它仍将返回呼叫者自己的服务。