Android - 避免在多个应用程序中并行 运行 相同的服务
Android - avoiding parallel run of same service within multiple apps
小背景: 我正在开发使用一种后台服务的库。很有可能会有 2 个或更多应用程序在同一个 android phone.
上实现该库
问:如果其中一个已安装的应用程序已经启动了该服务,是否有任何解决方案可以阻止该后台服务运行?我基本上只需要那个 bg 服务的一个实例 运行 无论有多少应用程序正在使用服务实现 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;
}
如果找到服务 运行,该方法将 return 为真。您也可以使用 getRunningServiceInfo(x).
仅列出特定数量的服务
小背景: 我正在开发使用一种后台服务的库。很有可能会有 2 个或更多应用程序在同一个 android phone.
上实现该库问:如果其中一个已安装的应用程序已经启动了该服务,是否有任何解决方案可以阻止该后台服务运行?我基本上只需要那个 bg 服务的一个实例 运行 无论有多少应用程序正在使用服务实现 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;
}
如果找到服务 运行,该方法将 return 为真。您也可以使用 getRunningServiceInfo(x).
仅列出特定数量的服务