检查服务是否可用
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) {
}
};
在调用 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) {
}
};