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).

仅列出特定数量的服务