如何判断我的未绑定服务是否正在运行?

时间:2011-09-23 16:47:52

标签: android service

我已阅读其他有关checking if a service is running的帖子,但这对我不起作用。

我的情况是创建后台Web服务器服务但不绑定它,因为我希望它在活动结束后继续运行。该服务会创建一个通知,以便用户可以看到它正在运行。用户可以通过活动上的按钮停止服务。

这一切都运行正常,除了启动活动,我无法确定该服务是否已在运行。使用以下内容:

if (isMyServiceRunning() == false)
{
  Intent ws = new Intent(this, WebServerService.class);
  startService(ws);
}

这个

private boolean isMyServiceRunning() {

    String sClassName;

    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) 
    {
        sClassName = service.service.getClassName();
        DebugMsg("Service: " + sClassName);

        if (sClassName.contains("com.<mydomain>.webservice"))
        {
              return true;
        }
    }

    return false;
}

我获得了系统和第三方服务运行的服务列表。但是我的服务没有显示在列表中,即使我知道它正在运行。如果我进入手机的设置 - &gt;应用程序 - &gt;运行服务,我可以看到它在那里运行。

我在文档中读到,应该忽略在已经运行的服务上调用startService。但事实并非如此,因为我在调试器中可以看到正在调用OnCreate和OnStart。

每次都不创建新服务非常重要,因为后台服务可能正在提供文件。该活动不需要与服务进行任何通信 - 仅在未运行时启动它,如果用户点击按钮则将其终止。

有关我的服务未显示在getRunningServices列表中的原因吗?

2 个答案:

答案 0 :(得分:4)

第1步:将static boolean isRunning=false添加到您的服务中。

第2步:在isRunning服务中将true设置为onCreate()

第3步:在isRunning服务中将false设置为onDestroy()

步骤4:检查isRunning以查看服务是否正在运行。

  

我在文档中读到,应该忽略在已经运行的服务上调用startService。但事实并非如此,因为我在调试器中可以看到正在调用OnCreate和OnStart。

我非常有信心在正在运行的服务上调用onCreate()时不会调用startService()。每次onStartCommand()电话都会调用onStart()(因此,startService()用于旧服务)。

  

重要的是我每次都不创建新服务

服务是天生的单身人士。内存中将有正好0或1份服务副本。永远不会有2个或更多。

答案 1 :(得分:0)

实际上,我的服务现在显示在服务列表中。我现在想的是,在重新启动手机之前,服务名称可能没有注册,因为我没有做任何更改,但重启后现在一切正常。