2011-09-23 120 views
1

我已阅读关于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; 
} 

我得到的服务的列表上运行,对于系统和第三方服务。但是我的服务没有出现在列表中,尽管我知道它正在运行。如果我进入手机的设置 - >应用程序 - >运行服务,我可以看到它在那里运行。

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

重要的是,我不会每次都创建一项新服务,因为后台服务可能正处于服务文件的中间。该活动不需要与服务进行任何通信 - 只能在未运行时启动它,并在用户点击按钮时将其杀死。

关于为什么我的服务没有显示在getRunningServices列表中的任何想法?

+0

btw将getSystemService(..)列表在我所有的本地服务?!我不觉得嘘..:S – Ewoks

回答

4

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

步骤#2:将isRunning设置为true,onCreate()的服务。

步骤#3:将isRunning设置为falseonDestroy()的服务。

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

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

我非常有信心,当startService()上正在运行的服务调用onCreate()不叫。 onStartCommand()(因此,旧的服务onStart())将调用每个startService()调用。

,我不创建一个新的服务,每次

服务是天然的单身是很重要的。内存中将有0或1个服务副本。永远不会有2个或更多。

+0

感谢您的快速回复,但没有运气。 isRunning上下文丢失。我在OnCreate中将其设置为true,并在第二次调用startService时检查该变量,但仍然是false。 onCreate和onStart总是被调用。我甚至为每个onCreate,onStart和onDestroy创建了单独的静态计数器。 startService被调用后,它们始终为零。有趣的是,虽然onDestroy从来没有被称为。 –

+0

@Gregg Reno:然后,你的应用程序就会严重混乱。确保你的清单中没有'android:process'属性或者会导致你拥有单独进程的东西。 – CommonsWare

+0

我也在使用IntentService与另一台服务器通信吗?

0

其实,我的服务现在显示在服务列表中。我现在在想,可能服务名称在重新启动手机之后才会被注册,因为我没有做任何更改,但是重新启动后所有内容都正常工作。

+0

Uffff ..那是超级混乱..你将如何确保当用户运行你的应用程序时不会发生这种情况? ( – Ewoks

相关问题