android下判断Service(服务)的是否正在运行(读取服务状态)

在android开发中,我们经常会用Service服务来实现后台任务,但是有时候我们的程序可能会因为各种异常或者特殊情况,出现未知的问题,导致我们无法正确的读取Service服务的状态。比如:有些人喜欢用一个bool变量来表示服务的运行状态,启动service的时候,设为true,停止的时候设为false,然后根据这个变量的true or false来判断服务是否启动。没错,这种方法的确是可以,但是仅仅适用于你的service内部没有任何异常或者你的service内部有try..catch的情况下。否则一旦service内部出现异常并且没有被捕获的话,你的服务就会异常停止,而此时你的变量还是true的。


那么怎么样才能准确的判断服务的运行状态呢?下面我们来看一段代码

//判断服务是否正在运行
boolean IsServiceRunning()
{
ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
{
if (service.service.getClassName().equals("com.7var.mygps.BaiduService"))
{
return true;
}
}
return false;
}

在上面这段代码里,实际上就是获取了当前所有正在运行的service列表,然后逐个跟自己的service名称对比,如果自己的service在这个列表里面,就说明我们的服务是正常运行的,反之则表示服务已经停止。


上面的com.7var.mygps.BaiduService是我的服务名称,大家把这里改成自己的就可以了。注意这里的名称一定要写对。比如我这个服务在AndroidManifest.xml里面的配置是:

android:name=".BaiduService"
android:enabled="true"
android:exported="true">

这里看起来是BaiduService,但是实际他前面还有个点,表示包名。所以我这里完整的服务名称是com.7var.mygps.BaiduService


大家自己也动手试试吧。

  1. 本网站所收集的部分资料来源于互联网,本站不对其真实性负责,也不构成任何其他建议。如果您发现有侵犯您权益的内容,请与我们取得联系,我们会及时修改或删除。
  2. 传递知识、传递力量,欢迎各位网友对本站的文章进行转载和分享。
  3. 本站QQ群交流群:904314688  群号:904314688
发表评论
 
评论列表(目前共有 条评论)
暂时还没有评论哦~

文章搜索

商家广告


版权所有:秋风雅居 (www.198933.com) ©2024 All Rights Reserved.

粤ICP备20031662号