今天,简单讲讲如何获取系统运行的进程。

ActivityManager.RunningAppProcessInfo类与获取正在运行的应用程序
每一个应用程序都会运行在它独立的进程里,但是为了节省资源或者这些应用程序是为了完成某一共同工作,它们
也可能会运行在一个进程里。

知识点介绍:
ActivityManager.RunningAppProcessInfo类
说明: 封装了正在运行的进程信息
常用字段:
int   pid    进程ID
int   uid    进程所在的用户ID
String   processName 进程名,默认是包名或者由android:process=””属性指定
String [ ]   pkgList      运行在该进程下的所有应用程序包名

另外。讲讲ActivityManager的使用:

知识准备:Android 应用程序模块: 应用、任务、进程的知识介绍:

1  一个android 包(简称.apk) :里面包含应用程序的代码以及资源。这是一个应用发布,用户能下载并安装他们

设备上的文件。

2  一个 任务 :通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可以来启动任务,这是一个

上层的应用,可以将你的任务切换到前台来。

3  一个 进程 :是一个底层的代码运行级别的核心进程。通常.apk包里所有代码运行在一个进程里,一个进程对于

一个.apk包;然而,进程 标签常用来改变代码运行的位置,可以是全部的.apk包 或者是独立的活动,接收器,服务, 或者

提供器组件。

进程

在Android中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用途很简单:

1、提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。

2、可将多个.apk包运行在同一个进程里减少系统开销。

3、帮助系统管理资源,将重要的代码放在一个单独的进程里,这样就可以单独销毁应用程序的其他部分。

于是,为了完成某一任务或者减少系统资源的开销,一个进程里可以运行一个或多个应用程序

更多知识点获取,请访问:《Android 应用程序模块: 应用, 任务, 进程, 和线程

ActivityManager 类:

获取方法 ActivityManager mActivityManager (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

常用的静态内部类如下(下面具体介绍):

ActivityManager.MemoryInfo: 系统可用内存信息

ActivityManager.RecentTaskInfo: 最近的任务信息

ActivityManager.RunningAppProcessInfo: 正在运行的进程信息

ActivityManager.RunningServiceInfo: 正在运行的服务信息

ActivityManager.RunningTaskInfo: 正在运行的任务信息

 常用方法:

public void getMemoryInfo(ActivityManager.MemoryInfo outInfo)

说明:获取系统可用内存信息,数据封装在outInfo对象上

public Debug.MemoryInfo getProcessMemoryInfo(int[ ] pids

说明:获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。

参数: pids 进程ID的集合

PS :我们可以通过调用Debug.MemoryInfo 的dalvikPrivateDirty字段获取进程占用的内存大小(单位为KB)

public List<ActivityManager.RunningAppProcessInfo>getRunningAppProcess()

说明: 获取系统里正在运行的进程

public List<ActivityManager.RunningServiceInfo>getRunningServices(int maxNum)

说明: 获取系统里所有正在运行的服务

参数:可能服务的最大值(赋予一常数即可,20、50都OK)

public List<ActivityManager.RunningTaskInfoo>getRunningTasks(int maxNum)

说明:获取系统里正在运行的服务

参数: 同上

public List<ActivityManager.RecentTaskInfo>getRecentTasks(int maxNum, int flags)

说明:获取系统里最近启动的任务

参数: 同上,flags一般为0即可

public voidkillBackgroundProcess(String packageName)

说明:立即杀掉给定包名的进程,释放进程占用的资源(内存等),如果需要,系统会再次重新启动该进程。系统

PS:系统进程是杀不死的,只能杀死用户进程。但我没有找到好的方法辨别系统进程还是用户进程。但可以肯定的是,

能够杀死的一定是用户进程。

public void restartPackage(String packageName)

说明:该方法已弃用,等同于killBackgroundProcess 。

ActivityManager.MemoryInfo类

    常用字段:

long availMem 系统可用内存

long threshold系统内存不足的阀值,即临界值

boolean lowMemory 如果当前可用内存<=threshold,该值为真

具体代码:

/**

* 判断进程是否运行 *

@return */

public static boolean isProessRunning(Context context, String proessName) {boolean isRunning = false;ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningAppProcessInfo> lists = am.getRunningAppProcesses();for (ActivityManager.RunningAppProcessInfo info : lists) {if (info.processName.equals(proessName)) {isRunning = true;}}return isRunning;}

**

 * 判断service是否运行
 * @return
 */
public static boolean isServiceExisted(Context context, String className) {ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(Integer.MAX_VALUE);if (!(serviceList.size() > 0)) {return false;}for (int i = 0; i < serviceList.size(); i++) {ActivityManager.RunningServiceInfo serviceInfo = serviceList.get(i);ComponentName serviceName = serviceInfo.service;if (serviceName.getClassName().equals(className)) {return true;}}return false;}

判断service运行的代码似乎有问题,我在程序里无法判断自己的service是否在运行。有兴趣的自己查找资料。

android 获取手机运行的进程就讲完了。

就这么简单。



android 获取手机运行的进程相关推荐

  1. Android获取正在运行的进程列表

    Android 获取正在运行的进程,下列方法暂时只能获取Android 7 及以下版本 三方库: implementation 'com.jaredrummler:android-processes: ...

  2. 查看进程Android大全,Android 查看手机中所有进程

    真机测试的时候发现DDMS对进程的显示很不给力,一些进程管理工具又不显示包名. 所以就自己写了一个小程序,查看自己手机中的进程,显示当前时间和进程的包名: 程序运行截图: 布局: xmlns:tool ...

  3. android 通过手机号码查询联系人,android获取手机通讯录联系人

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  4. android获取手机通讯录联系人

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  5. android sim卡联系人存储格式,Android获取手机通讯录、sim卡联系人及调用拨号界面方法...

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  6. 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://2402766.blog.51cto.com/2392766/1080837 为了 ...

  7. Qt for Android获取手机序列号/手机型号/手机制造商

    前言 Qt for Android 获取手机型号/手机制造商/手机序列号,这些是要通过 Android 原生接口才能获取到的, 那么在 Qt 项目中通过 jni 接口调用 Android 原生接口来获 ...

  8. Python 第三方模块之 psutil - 获取系统运行的进程和系统利用率信息

    一.psutil模块: 官方网址:http://pythonhosted.org/psutil/ 1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻 ...

  9. android 获取已安装 错误代码,android获取手机已经安装的app信息

    Android获取手机已安装APP(系统/非系统) 效果图 主体代码 private ListView mlistview; private ListpackageInfoList; private ...

最新文章

  1. uml 时序图_设计模式:UML是怎么回事?设计原则?
  2. 年终凡尔赛,都是别人家的公司...
  3. IOS开发之自定义Button(集成三种回调模式)
  4. mysql post 中文乱码_mysql/mariaDB中文乱码问题的处理
  5. Java 什么叫做实例化
  6. ML之xgboost :xgboost.plot_importance()函数的解读
  7. SpringBoot整合Shiro(认证+授权)
  8. 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
  9. 找软件开发开发工作_将求职变成开发项目
  10. linux创建管道的函数,Linux下的有名管道(03)---使用函数创建和删除有名管道
  11. harmonyOS的架构图,HarmonyOS通用设计基础---应用架构
  12. 安卓干货——安卓NFC通信
  13. 双击idea桌面快捷方式无法打开,没有反应,但是Idea.bat可以正常打开
  14. web前端-----细线表格(table)的制作
  15. vue项目中使用@babel/plugin-proposal-optional-chaining的?.语法,防止字段没有报错
  16. 知识众筹第9期 一个经典案例学会数据分析 | 开始分红报名
  17. PMP 易错题汇总(二)
  18. Struts2中XXX.Action类中方法的访问(三种方式)
  19. wow(2) : UI插件_EUI[2]_正式服配置分享
  20. 【已解决】win10远程桌面连接报错:出现身份验证错误,要求的函数不受支持(CredSSP)

热门文章

  1. StringUtils.isBlank()检验String 类型的变量是否为空
  2. 基于EasyNVR二次开发实现业务需求:直接集成EasyNVR播放页面到自身项目
  3. Js函数function基础理解
  4. 雅思8分大神叫你如何学习口语
  5. Android模拟器慢的解决办法
  6. bzoj4316: 小C的独立集
  7. Python并发编程:多线程-死锁现象与递归锁
  8. linux下执行scrapy的爬虫定时任务
  9. SqlHelper简单实现(通过Expression和反射)4.对象反射Helper类
  10. oracle存储过程实现根据已有数据批量更新另一批数据