检查服务是否可用

Check if service is available

在调用 Context.bindService 之前,我需要知道特定服务是否可用(运行 或是否可以创建)。

有办法检查吗?

您可以使用代码

检查服务是否运行
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;
}

我使用以下方式称呼它:

isMyServiceRunning(MyService.class)

hack bods 对此的回应摘录Google Group Discussion

如果您的客户端和服务器代码是同一个 .apk 的一部分,并且您使用具体的 Intent(指定确切服务 class)绑定到服务,那么您可以简单地使用您的服务当您的客户可以检查 运行 时设置一个全局变量。

我们故意没有 API 来检查服务是否 运行 因为,几乎没有失败,当你想做这样的事情时,你最终会在代码中遇到竞争条件.

请看评论

 ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service)    {
    // capture the service object , check for alive or not
         service.isBinderAlive(); 

        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };