Android - getRunningservices(ActivityManager)已弃用

时间:2017-08-05 07:28:22

标签: java android

我想知道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()。那么我们还有另一个很好的解决方案(方法)来获取当前正在运行的服务列表吗?

2 个答案:

答案 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开始,此方法对第三方应用程序不再可用。 为了向后兼容,它仍将返回呼叫者自己的服务。