【问题标题】:Check if Foreground service is running in Android OREO检查前台服务是否在 Android OREO 中运行
【发布时间】:2019-05-14 14:58:05
【问题描述】:

我想检查我的服务是否正在运行, 我正在使用下面的代码,它在牛轧糖之前工作正常,但在 OREO 中不能工作

 private boolean isMyServiceRunning(Class<?> serviceClass, Context context) {
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            Log.d(TAG, "isMyServiceRunning: " + service.service.getClassName());
            if (serviceClass.getName().equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }

但以上代码不适用于前台服务。

我已经推荐了this,但它也不起作用..

【问题讨论】:

  • 从 Nougat 开始,服务不会在后台运行一段时间,它会被系统自动停止,请使用 Job Scheduler 尝试 JobService。
  • 不是重复的@Adam
  • 他们都在问如何检查前台服务是否正在运行@amin。另外,您为什么要检查服务是否正在运行?如果是启动或创建一个,那么this solution将很有用。
  • 不,此解决方案在自定义操作系统中没有帮助,这永远不会有帮助。我已经在许多设备上进行了尝试,并最终确定天气服务是否正在运行。这和你想的完全不同。 @亚当

标签: android performance service foreground-service


【解决方案1】:

ActivityManager.getRunningServices() API 自 API 26 起一直为 deprecated,并且自 Oreo 起不再可用。它旨在仅用于调试,而不是生产应用程序。您的应用不应依赖此类 API。

【讨论】:

  • 同意!但是有什么方法可以检查服务是否正在运行?
  • 可能不是没有大量工作,并且很难作为第 3 方应用程序长期支持。您可能能够获取所有正在运行的进程,然后通过每个进程找到您的包。但是,这并不能告诉您服务是否正在运行。
  • 他们会开发这种设置服务的脆弱系统,然后不为开发人员提供某种方式来检查他们所处的状态,这似乎很疯狂。
  • 不同,但并非不可行。典型的模式是您的应用程序(例如Activity)始终启动您的Service,并且服务知道自己的状态。如果它已经在运行,它可以简单地忽略新的启动请求(或在需要时使用它来刺激更新。)只要这种情况不经常发生,调用startService 所涉及的开销应该可以忽略不计。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多