欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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的类全名进行判断就会判断错误

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: