在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:enabled="true"
android:exported="true">
这里看起来是BaiduService,但是实际他前面还有个点,表示包名。所以我这里完整的服务名称是com.7var.mygps.BaiduService
大家自己也动手试试吧。
ok
mjj通道