我已阅读其他有关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列表中的原因吗?
答案 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)
实际上,我的服务现在显示在服务列表中。我现在想的是,在重新启动手机之前,服务名称可能没有注册,因为我没有做任何更改,但重启后现在一切正常。