今天作Android开机自启动service的时候,忽然想到了个问题。php
以前,service没有加入开机自启动的时候,service是在启动app的时候启动的,如今把service加入了开机自启动里,因此,在启动app的时候要作一个判断,判断该service是否已经启动,若是没有启动,则,启动。若是,已经启动,就没必要在启动了。app
如今把获取本机的全部启动的服务类名和判断某个service是否启动的代码贴上来分享给你们。this
//获取全部启动的服务的类名 spa
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);ci
List<ActivityManager.RunningServiceInfo>serviceList= activityManager..getRunningServices(30); //先得到运行着sevice的列表
private String getServiceClassName(List<ActivityManager.RunningServiceInfo> serviceList){
String res = "";
for(int i = 0; i < serviceList.size(); i ++){
res+=serviceList.get(i).service.getClassName()+ " /n";
}
return res;
}get
//经过Service的类名来判断是否启动某个服务
private boolean serviceIsStart(List<ActivityManager.RunningServiceInfo> serviceList , String serviceClassName){
for(int i = 0; i < serviceList.size(); i ++){
if(serviceClassName.equals(serviceList.get(i).service.getClassName())){
return true;
}
}
return false;
}
it
应用demo列子:class
public void onCreate(Bundle savedInstanceState) {后台
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(300);
final String serviceName = "com.hw.zmxy.service.DetecteAlarmService"; // 个人一个服务
boolean flag = serviceIsStart(serviceList, serviceName);
if (flag) {
Log.i(TAG, "DetecteAlarmService已经启动过了!");
} else {
// 能够在此添加 启动service的代码List
Log.i(TAG, "DetecteAlarmService首次启动!");
Intent mIntent = new Intent(this, DetecteAlarmService.class);
startService(mIntent); // 开启监测服务
}
}
/**
* 经过Service的类名来判断是否启动某个服务
*/
public boolean serviceIsStart(List<ActivityManager.RunningServiceInfo> serviceList, String serviceClassName) {
for (int i = 0; i < serviceList.size(); i++) {
if (serviceClassName.equals(serviceList.get(i).service.getClassName())) {
return true;
}
}
return false;
}
杀不掉的后台服务: