android 获取手机运行的进程
今天,简单讲讲如何获取系统运行的进程。
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 获取手机运行的进程相关推荐
- Android获取正在运行的进程列表
Android 获取正在运行的进程,下列方法暂时只能获取Android 7 及以下版本 三方库: implementation 'com.jaredrummler:android-processes: ...
- 查看进程Android大全,Android 查看手机中所有进程
真机测试的时候发现DDMS对进程的显示很不给力,一些进程管理工具又不显示包名. 所以就自己写了一个小程序,查看自己手机中的进程,显示当前时间和进程的包名: 程序运行截图: 布局: xmlns:tool ...
- android 通过手机号码查询联系人,android获取手机通讯录联系人
android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...
- android获取手机通讯录联系人
android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...
- android sim卡联系人存储格式,Android获取手机通讯录、sim卡联系人及调用拨号界面方法...
android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...
- 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://2402766.blog.51cto.com/2392766/1080837 为了 ...
- Qt for Android获取手机序列号/手机型号/手机制造商
前言 Qt for Android 获取手机型号/手机制造商/手机序列号,这些是要通过 Android 原生接口才能获取到的, 那么在 Qt 项目中通过 jni 接口调用 Android 原生接口来获 ...
- Python 第三方模块之 psutil - 获取系统运行的进程和系统利用率信息
一.psutil模块: 官方网址:http://pythonhosted.org/psutil/ 1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻 ...
- android 获取已安装 错误代码,android获取手机已经安装的app信息
Android获取手机已安装APP(系统/非系统) 效果图 主体代码 private ListView mlistview; private ListpackageInfoList; private ...
最新文章
- uml 时序图_设计模式:UML是怎么回事?设计原则?
- 年终凡尔赛,都是别人家的公司...
- IOS开发之自定义Button(集成三种回调模式)
- mysql post 中文乱码_mysql/mariaDB中文乱码问题的处理
- Java 什么叫做实例化
- ML之xgboost :xgboost.plot_importance()函数的解读
- SpringBoot整合Shiro(认证+授权)
- 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
- 找软件开发开发工作_将求职变成开发项目
- linux创建管道的函数,Linux下的有名管道(03)---使用函数创建和删除有名管道
- harmonyOS的架构图,HarmonyOS通用设计基础---应用架构
- 安卓干货——安卓NFC通信
- 双击idea桌面快捷方式无法打开,没有反应,但是Idea.bat可以正常打开
- web前端-----细线表格(table)的制作
- vue项目中使用@babel/plugin-proposal-optional-chaining的?.语法,防止字段没有报错
- 知识众筹第9期 一个经典案例学会数据分析 | 开始分红报名
- PMP 易错题汇总(二)
- Struts2中XXX.Action类中方法的访问(三种方式)
- wow(2) : UI插件_EUI[2]_正式服配置分享
- 【已解决】win10远程桌面连接报错:出现身份验证错误,要求的函数不受支持(CredSSP)