今天作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;
}
殺不掉的後臺服務: