当前位置: 移动技术网 > IT编程>开发语言>Java > android中判断服务或者进程是否存在实例

android中判断服务或者进程是否存在实例

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网