android中判斷服務(wù)或者進(jìn)程是否存在實(shí)例
1.判斷進(jìn)程是否存在
/** * 判斷是否在主進(jìn)程,這個(gè)方法判斷進(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,因?yàn)榭赡苡兄孛腟ervice,所以要找自己程序的Service,不同進(jìn)程只要是同一個(gè)程序就是同一個(gè)uid,個(gè)人理解android系統(tǒng)中一個(gè)程序就是一個(gè)用戶(hù) * 用pid替換uid進(jìn)行判斷強(qiáng)烈不建議,因?yàn)槿绻沁h(yuǎn)程Service的話(huà),主進(jìn)程的pid和遠(yuǎn)程Service的pid不是一個(gè)值,在主進(jìn)程調(diào)用該方法會(huì)導(dǎo)致Service即使已經(jīng)運(yùn)行也會(huì)認(rèn)為沒(méi)有運(yùn)行 * 如果Service和主進(jìn)程是一個(gè)進(jìn)程的話(huà),用pid不會(huì)出錯(cuò),但是這種方法強(qiáng)烈不建議,如果你后來(lái)把Service改成了遠(yuǎn)程Service,這時(shí)候判斷就出錯(cuò)了 * * @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的類(lèi)全名,網(wǎng)上我查到的資料,全部是用的pid,在Service和主進(jìn)程是一個(gè)進(jìn)程的時(shí)候,pid沒(méi)有問(wèn)題,但是如果Service是遠(yuǎn)程Service,和主進(jìn)程就不是一個(gè)進(jìn)程了,這時(shí)候用pid和Service的類(lèi)全名進(jìn)行判斷就會(huì)判斷錯(cuò)誤
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何實(shí)現(xiàn)自定義SpringBoot的Starter組件
這篇文章主要介紹了實(shí)現(xiàn)自定義SpringBoot的Starter組件的示例代碼,想要自定義starter組件,首先要了解springboot是如何加載starter的,也就是springboot的自動(dòng)裝配機(jī)制原理,本文結(jié)合示例代碼詳細(xì)講解,需要的朋友可以參考下2023-02-02java線(xiàn)程封閉之棧封閉和ThreadLocal
這篇文章主要介紹了java線(xiàn)程封閉之棧封閉和ThreadLocal,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10idea手動(dòng)執(zhí)行maven命令的三種實(shí)現(xiàn)方式
這篇文章主要介紹了idea手動(dòng)執(zhí)行maven命令的三種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Spring靜態(tài)代理和動(dòng)態(tài)代理代碼詳解
這篇文章主要介紹了Spring靜態(tài)代理和動(dòng)態(tài)代理代碼詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11SpringBoot Entity中枚舉類(lèi)型詳細(xì)使用介紹
本文介紹SpringBoot如何在Entity(DAO)中使用枚舉類(lèi)型。(本文使用MyBatis-Plus)。在實(shí)際開(kāi)發(fā)中,經(jīng)常會(huì)遇到表示類(lèi)型或者狀態(tài)的情況,比如:有三種支付方式:微信、支付寶、銀聯(lián)。本文介紹如何這種場(chǎng)景的方案對(duì)比,并用實(shí)例來(lái)介紹如何用枚舉這種最優(yōu)雅的來(lái)表示2022-10-10微服務(wù)架構(gòu)設(shè)計(jì)RocketMQ基礎(chǔ)及環(huán)境整合
這篇文章主要介紹了微服務(wù)架構(gòu)設(shè)計(jì)入門(mén)RocketMQ的基礎(chǔ)及環(huán)境整合實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10mybatis-plus更新策略部分字段不更新問(wèn)題
這篇文章主要介紹了mybatis-plus更新策略部分字段不更新問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Java連接Oracle數(shù)據(jù)庫(kù)實(shí)例解析
數(shù)據(jù)庫(kù)的操作是當(dāng)前系統(tǒng)開(kāi)發(fā)必不可少的開(kāi)發(fā)部分之一。接下來(lái)通過(guò)本文給大家介紹Java連接Oracle數(shù)據(jù)庫(kù)實(shí)例解析,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06java實(shí)現(xiàn)向有序數(shù)組中插入一個(gè)元素實(shí)例
本篇文章主要介紹了java實(shí)現(xiàn)向有序數(shù)組中插入一個(gè)元素實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05