1. 程式人生 > >android服務已經啟動卻判斷不出服務是否已經存在

android服務已經啟動卻判斷不出服務是否已經存在

在啟動一個android服務之前,先判斷這個服務是否已經啟動,網上有一個方法如下

private boolean isWorked(String className) {
	ActivityManager manager = (ActivityManager) getApplicationContext()
			.getSystemService(Context.ACTIVITY_SERVICE);
	ArrayList<RunningServiceInfo> runningService = (ArrayList<RunningServiceInfo>) manager
			.getRunningServices(256);
	for (int i = 0; i < runningService.size(); i++) {
		String mName = runningService.get(i).service.getClassName().toString();
		if (mName.equals(className)) {
			return true;
		}
	}
	return false;
}

這個方法沒有問題,能狗判斷出所有正在執行的服務,包括系統服務和應用開發者啟動的服務,

但是問題來了,為什麼自己啟動的服務已經啟動了卻判斷不出,原因在此,因為是在網上直接找的方法:ArrayList<RunningServiceInfo> runningService = (ArrayList<RunningServiceInfo>) manager.getRunningServices(30);getRunningService(30裡面寫的是30,原因是給的範圍太少,即便自己的service是在running,但是沒有被新增到這個集合當中,所以也就判斷不出,證據如下


獲取系統的服務將近有90多個,所以即便自己寫的服務已經被啟動,集合容量太小的話也新增不到集合當中,所以這裡一般把集合的數量調的大一點,就是為了防止服務啟動的太多,自己的服務新增不到集合當中,從而不能用這種方法判斷,這了寫了一個256,足夠了,最後能夠用這種方法判斷出

自己寫的應用有沒有被啟動,如有不妥之處請留言,互相交流以促進學習,謝謝!