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

时间:2017-06-13 09:49:26

标签: android service

有没有简单的方法来确定某项服务是否有效?我这样做

    boolean serviceWorking = false;

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

但它不起作用。

2 个答案:

答案 0 :(得分:5)

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

你可以在活动

中编写这样的方法
<table border="1px">
  <tr>
    <td>
      <div>
        <div style="width:calc(100% - 32px);overflow: auto;float:left">
          <span>
            <form>
            <textarea></textarea>
            </form>
          </span>
        </div>
        <div style="float: right;">
          <button type="button" class="btn btn-primary" style="width:32px;font-size:8px;" title="Select Financial Instrument">
            Click
          </button>
        </div>
      </div>
    </td>
    <td>Another cell</td>
  </tr>
</table>

使用:

来调用它
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;
}

答案 1 :(得分:1)

我参考以下内容: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);
    }
}