小背景: 我正在开发使用一个后台服务的图书馆。很有可能会有两个或更多的应用程序在同一个android手机上实现这个库。
Q:是否有任何解决方案来防止这个后台服务运行,如果其中一个安装的应用程序已经启动了该服务?我基本上只需要一个bg服务的实例运行,不管有多少应用程序实现了这个带有service的lib。
所以后来我意识到我可以列出所有正在运行的服务,并将名称与我感兴趣的服务相匹配。如果它正在运行,那么我就不会尝试启动另一个。
protected static boolean isMyServiceRunning(Class<?> serviceClass, Context cont) {
ActivityManager manager = (ActivityManager) cont.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> list = manager
.getRunningServices(Integer.MAX_VALUE);
if (list == null || list.isEmpty()) {
return true;
}
for (ActivityManager.RunningServiceInfo service : list) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
如果发现服务正在运行,该方法将返回true。您还可以使用getRunningServiceInfo(x)只列出特定数量的服务。