溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

android中判斷服務(wù)或者進(jìn)程是否存在實例

發(fā)布時間:2020-09-02 18:02:00 來源:腳本之家 閱讀:244 作者:o動感超人o 欄目:編程語言

1.判斷進(jìn)程是否存在

 /**
  * 判斷是否在主進(jìn)程,這個方法判斷進(jìn)程名或者pid都可以,如果進(jìn)程名一樣那pid肯定也一樣
  *
  * @return true:當(dāng)前進(jìn)程是主進(jìn)程 false:當(dāng)前進(jìn)程不是主進(jìn)程
  */
 public boolean isUIProcess() {
  ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));
  List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
  String mainProcessName = getPackageName();
  int myPid = android.os.Process.myPid();
  for (ActivityManager.RunningAppProcessInfo info : processInfos) {
   if (info.pid == myPid && mainProcessName.equals(info.processName)) {
    return true;
   }
  }
  return false;
 }

2.判斷服務(wù)是否存在

 /**
  * 判斷service是否已經(jīng)運(yùn)行
  * 必須判斷uid,因為可能有重名的Service,所以要找自己程序的Service,不同進(jìn)程只要是同一個程序就是同一個uid,個人理解android系統(tǒng)中一個程序就是一個用戶
  * 用pid替換uid進(jìn)行判斷強(qiáng)烈不建議,因為如果是遠(yuǎn)程Service的話,主進(jìn)程的pid和遠(yuǎn)程Service的pid不是一個值,在主進(jìn)程調(diào)用該方法會導(dǎo)致Service即使已經(jīng)運(yùn)行也會認(rèn)為沒有運(yùn)行
  * 如果Service和主進(jìn)程是一個進(jìn)程的話,用pid不會出錯,但是這種方法強(qiáng)烈不建議,如果你后來把Service改成了遠(yuǎn)程Service,這時候判斷就出錯了
  *
  * @param className Service的全名,例如PushService.class.getName()
  * @return true:Service已運(yùn)行 false:Service未運(yùn)行
  */
 public boolean isServiceExisted(String className) {
  ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  List<ActivityManager.RunningServiceInfo> serviceList = am.getRunningServices(Integer.MAX_VALUE);
  int myUid = android.os.Process.myUid();
  for (ActivityManager.RunningServiceInfo runningServiceInfo : serviceList) {
   if (runningServiceInfo.uid == myUid && runningServiceInfo.service.getClassName().equals(className)) {
    return true;
   }
  }
  return false;
 }

注意:

上面判斷Service是否存在,用的uid和Service的類全名,網(wǎng)上我查到的資料,全部是用的pid,在Service和主進(jìn)程是一個進(jìn)程的時候,pid沒有問題,但是如果Service是遠(yuǎn)程Service,和主進(jìn)程就不是一個進(jìn)程了,這時候用pid和Service的類全名進(jìn)行判斷就會判斷錯誤

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI