android中判斷服務(wù)或者進程是否存在實例
1.判斷進程是否存在
/**
* 判斷是否在主進程,這個方法判斷進程名或者pid都可以,如果進程名一樣那pid肯定也一樣
*
* @return true:當前進程是主進程 false:當前進程不是主進程
*/
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)運行
* 必須判斷uid,因為可能有重名的Service,所以要找自己程序的Service,不同進程只要是同一個程序就是同一個uid,個人理解android系統(tǒng)中一個程序就是一個用戶
* 用pid替換uid進行判斷強烈不建議,因為如果是遠程Service的話,主進程的pid和遠程Service的pid不是一個值,在主進程調(diào)用該方法會導(dǎo)致Service即使已經(jīng)運行也會認為沒有運行
* 如果Service和主進程是一個進程的話,用pid不會出錯,但是這種方法強烈不建議,如果你后來把Service改成了遠程Service,這時候判斷就出錯了
*
* @param className Service的全名,例如PushService.class.getName()
* @return true:Service已運行 false:Service未運行
*/
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和主進程是一個進程的時候,pid沒有問題,但是如果Service是遠程Service,和主進程就不是一個進程了,這時候用pid和Service的類全名進行判斷就會判斷錯誤
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何實現(xiàn)自定義SpringBoot的Starter組件
這篇文章主要介紹了實現(xiàn)自定義SpringBoot的Starter組件的示例代碼,想要自定義starter組件,首先要了解springboot是如何加載starter的,也就是springboot的自動裝配機制原理,本文結(jié)合示例代碼詳細講解,需要的朋友可以參考下2023-02-02
idea手動執(zhí)行maven命令的三種實現(xiàn)方式
這篇文章主要介紹了idea手動執(zhí)行maven命令的三種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
微服務(wù)架構(gòu)設(shè)計RocketMQ基礎(chǔ)及環(huán)境整合
這篇文章主要介紹了微服務(wù)架構(gòu)設(shè)計入門RocketMQ的基礎(chǔ)及環(huán)境整合實現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-10-10
java實現(xiàn)向有序數(shù)組中插入一個元素實例
本篇文章主要介紹了java實現(xiàn)向有序數(shù)組中插入一個元素實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05

