android中判断服务或者进程是否存在实例
程序员文章站
2023-12-21 09:09:10
1.判断进程是否存在
/**
* 判断是否在主进程,这个方法判断进程名或者pid都可以,如果进程名一样那pid肯定也一样
*
* @retur...
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.判断服务是否存在
/** * 判断service是否已经运行 * 必须判断uid,因为可能有重名的service,所以要找自己程序的service,不同进程只要是同一个程序就是同一个uid,个人理解android系统中一个程序就是一个用户 * 用pid替换uid进行判断强烈不建议,因为如果是远程service的话,主进程的pid和远程service的pid不是一个值,在主进程调用该方法会导致service即使已经运行也会认为没有运行 * 如果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的类全名,网上我查到的资料,全部是用的pid,在service和主进程是一个进程的时候,pid没有问题,但是如果service是远程service,和主进程就不是一个进程了,这时候用pid和service的类全名进行判断就会判断错误
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。