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

 更新时间:2017年05月27日 10:08:04   作者:o动感超人o  
本篇文章主要介绍了android中判断服务或者进程是否存在实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

相关文章

  • Java日常练习题,每天进步一点点(40)

    Java日常练习题,每天进步一点点(40)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Springboot使用POI进行excel文件的导出与下载方式

    Springboot使用POI进行excel文件的导出与下载方式

    这篇文章主要介绍了Springboot使用POI进行excel文件的导出与下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java学习之利用TCP实现的简单聊天示例代码

    java学习之利用TCP实现的简单聊天示例代码

    这篇文章主要给大家介绍了关于java学习笔记之利用TCP实现的简单聊天的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Java去掉小数点后面无效0的方案与建议

    Java去掉小数点后面无效0的方案与建议

    当前小数点后面的位数过多的时候,多余的0没有实际意义,下面这篇文章主要给大家介绍了关于Java去掉小数点后面无效0的方案与建议,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Java二叉树中LCA问题解决方法两则

    Java二叉树中LCA问题解决方法两则

    这篇文章主要介绍了Java二叉树中LCA问题解决方法,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2022-12-12
  • Java语言实现简单FTP软件 FTP软件效果图预览之上传功能(3)

    Java语言实现简单FTP软件 FTP软件效果图预览之上传功能(3)

    这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP软件效果图预览之上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • IntelliJ IDEA中查看文件内所有已声明的方法(类似eclipse的outline)

    IntelliJ IDEA中查看文件内所有已声明的方法(类似eclipse的outline)

    今天小编就为大家分享一篇关于IntelliJ IDEA中查看文件内所有已声明的方法(类似eclipse的outline),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 解决mybatis中order by排序无效问题

    解决mybatis中order by排序无效问题

    这篇文章主要介绍了解决mybatis中order by排序无效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java继承超详细教程

    Java继承超详细教程

    继承是面向对象语法的三大特征之一,继承可以降低代码编写的冗余度,提高编程的效率,通过继承,子类获得了父类的成员变量和方法,一个子类如何继承父类的字段和方法,如何修改从父类继承过来的子类的方法呢,今天我们开始学习有关Java继承的知识,感兴趣的朋友一起看看吧
    2023-11-11
  • JAVA 对象创建与对象克隆

    JAVA 对象创建与对象克隆

    这篇文章主要介绍了JAVA 对象创建与对象克隆,new 创建、反射、克隆、反序列化,克隆它分为深拷贝和浅拷贝,通过调用对象的 clone方法,进行对象的克隆,下面来看看文章的详细内容吧
    2022-02-02

最新评论