【问题标题】:Android: how do check if service is running?Android:如何检查服务是否正在运行?
【发布时间】:2017-06-13 09:49:26
【问题描述】:

是否有任何简单的方法可以确定某个服务是否处于活动状态?我这样做

    boolean serviceWorking = false;

    @Override
    public void onCreate() {
       serviceWorking = true;
    }
    @Override
    public void onDestroy() {
       serviceWorking = false;
       stopSelf(startId);
}

但它不起作用。

【问题讨论】:

标签: android service


【解决方案1】:

有关运行服务的信息由 Android 操作系统通过 ActivityManager#getRunningServices 提供。 所有使用 onDestroy 或 onSometing 事件或 Binder 或静态变量的方法都不会可靠地工作,因为作为开发人员,您永远不知道 Android 何时决定终止您的进程或是否调用了上述回调。

你可以在activity中写这样的方法

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

调用它:

isMyServiceRunning(MyService.class)

【讨论】:

  • 此解决方案在 Android O 中不再适用,因为 getRunningServices 已被弃用。它现在将只返回调用者自己的服务名称。
  • getRunningServices 现已弃用,不建议使用它
【解决方案2】:

我指的是:Check if service is running on Android?

public class MyService extends Service
{
    private boolean mRunning;

    @Override
    public void onCreate()
    {
        super.onCreate();
        mRunning = false;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        if (!mRunning) {
            mRunning = true;
            // do something
    }
        return super.onStartCommand(intent, flags, startId);
    }
}

【讨论】:

  • 如果你评论链接而不是帖子会更好
猜你喜欢
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
相关资源
最近更新 更多