Android:如何检查服务是否正在运行?

Android:如何检查服务是否正在运行?,android,service,Android,Service,有没有简单的方法来确定某项服务是否处于活动状态?我这样做 boolean serviceWorking = false; @Override public void onCreate() { serviceWorking = true; } @Override public void onDestroy() { serviceWorking = false; stopSelf(startId); } 但

有没有简单的方法来确定某项服务是否处于活动状态?我这样做

    boolean serviceWorking = false;

    @Override
    public void onCreate() {
       serviceWorking = true;
    }
    @Override
    public void onDestroy() {
       serviceWorking = false;
       stopSelf(startId);
}

但它不起作用。

我指的是:


我指的是:


Android操作系统通过ActivityManager#getRunningServices提供有关运行服务的信息。 所有使用onDestroy或onSometing事件、binder或静态变量的方法都无法可靠地工作,因为作为开发人员,您永远不知道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;
}

Android操作系统通过ActivityManager#getRunningServices提供有关运行服务的信息。 所有使用onDestroy或onSometing事件、binder或静态变量的方法都无法可靠地工作,因为作为开发人员,您永远不知道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;
}

发布完整的代码,发布完整的代码,如果您使用注释链接而不是post会更好如果您使用注释链接而不是post会更好由于getRunningServices已被弃用,此解决方案在Android O中不再有效。现在,它将只返回调用者自己的服务名称。
getRunningServices
现在已被弃用,不建议使用它。由于getRunningServices已被弃用,该解决方案在Android O中不再有效。它现在将只返回调用者自己的服务名称。
getRunningServices
现在已被弃用,不建议使用它
isMyServiceRunning(MyService.class)