如何检查服务是否在 Android 上运行?

新手上路,请多包涵

如何检查后台服务是否正在运行?

我想要一个切换服务状态的 Android 活动——它让我在它关闭时打开它,如果它打开则关闭它。

原文由 Bee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 570
2 个回答

不久前我遇到了同样的问题。由于我的服务是本地的,我最终只是使用服务类中的静态字段来切换状态,如 hackbod 所述

编辑(备案):

这是hackbod提出的解决方案:

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

我们故意没有 API 来检查服务是否正在运行,因为几乎没有失败,当您想做类似的事情时,您的代码中会出现竞争条件。

原文由 miracle2k 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 Android 8(或 Oreo)开始,API getRunningServices 已弃用。当然,您可以使用 @SuppressWarnings("deprecation") 来消除警告。

如果您的服务不需要有多个实例,以下是不使用 getRunninngServices 的方法:使用单例模式。

 public class MyMusicService extends Service {

    private static MyMusicService instance = null;

    public static boolean isMyMusicServiceRunning() {
        return instance != null;
    }

然后您可以从您的活动或其他地方调用 MyMusicService.isMyMusicServiceRunning

原文由 jlguenego 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题