ActivityManager.RunningServiceInfo类: 封装了正在运行的服务信息 获取系统里所有真正运行的服务是通过调用ActivityManager方法来得到的,具体方法如下: List<ActivityManager.RunningServiceInfo> getRunningServices (int maxNum) 功能:返回所有正在运行的服务 参数: maxNum 代表我们希望返回的服务数目大小,一般给个稍大的值即可, 例如,50 。 ActivityManager.RunningServiceInfo 类 常用字段: long activeSince 服务第一次被激活的时间, 包括启动和绑定方式 int clientCount 如果该Service是通过Bind方法方式连接,则clientCount代表了service连接客户端的数目 int crashCount 服务运行期间,出现死机的次数 boolean foreground 若为true,则该服务在后台执行 int pid 如果不为0,表示该service所在的进程ID号( PS:为0的话我也不清楚 - - 求指点) int uid 用户ID 类似于Linux的用户权限,例如root等 String process 进程名,默认是包名或者由属性android:process指定 ComponentName service 获得该Service的组件信息 包含了pkgname / servicename信息 PackageManger类 说明: 封装了对应用程序信息的操作 获得应用程序信息的的方法如下: public abstractApplicationInfo getApplicationInfo(String packageName, int flags) 参数:packagename 包名 flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可 功能:返回ApplicationInfo对象
上面是百度的,下面是我自己写的一个判断服务是否运行的工具方法,有需要的朋友直接粘贴就好,不足之处,还望指正
/** * 判断传入的服务名是否正在运行 */ public static boolean isServiceRunning(Context c,String serviceName){ //获取一个什么什么管理者,而后,进行判断 //ActivityManager 相当于win的任务管理器,什么都管 ActivityManager am = (ActivityManager) c.getSystemService(Context.ALARM_SERVICE); //通过任务管理器的getRunningServices()方法去获取当前正在运行的服务的信息 //后面的int值是希望获取的服务数 得到一个集合,遍历,看看有没有传入进来的参数 List<RunningServiceInfo> runningServices = am.getRunningServices(100); for (RunningServiceInfo runningServiceInfo : runningServices) { ComponentName component = runningServiceInfo.service; String className = component.getClassName(); if(className.equals(serviceName)){ return true; } } return false; }
注意,这里传入的参数建议为XXXService.class.getName();
比较的是全类名,建议使用体统提供的getView方法去获取