任务管理器(ActivityManager)
时间:2022-04-24
本文章向大家介绍任务管理器(ActivityManager),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
任务管理器(ActivityManager)
Android
中ActivityManager类似于Windows
下的任务管理器,能得到正在运行程序的内容等信息
- List getRunningServices(int maxNum)
Return a list of the services that are currently running.
这个maxNum是指返回的这个集合的最大值
可以利用
ActivityManager
去判断当前某个服务是否正在运行。 - List getRunningAppProcesses() Returns a list of application processes that are running on the device.
- List getRecentTasks(int maxNum, int flags) 得到最近使用的程序,集合中第一个元素是刚才正在使用的
- Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) Return information about the memory usage of one or more processes. 可以通过某个进程的id得到进程的内存使用信息,然后通过这个内存信息能够得到每个程序使用的内存大小 MemoryInfo中的方法 int getTotalPrivateDirty() Return total private dirty memory usage in kB得到占用内存的大小,单位是kb
/**
* 返回所有的进程列表信息
* @param context
* @return
*/
public static List<TaskInfo> getTaskInfos(Context context){
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcessInfos = am.getRunningAppProcesses();
List<TaskInfo> taskInfos = new ArrayList<TaskInfo>();
PackageManager pm = context.getPackageManager();
for(RunningAppProcessInfo appProcessInfo : appProcessInfos){
String packname = appProcessInfo.processName;
TaskInfo taskInfo = new TaskInfo();
taskInfo.setPackname(packname);
MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(new int[]{appProcessInfo.pid});
long memsize = memoryInfos[0].getTotalPrivateDirty() * 1024;
taskInfo.setMemsize(memsize);
try {
PackageInfo packInfo = pm.getPackageInfo(packname, 0);
Drawable icon = packInfo.applicationInfo.loadIcon(pm);
taskInfo.setIcon(icon);
String name = packInfo.applicationInfo.loadLabel(pm).toString();
taskInfo.setName(name);
if(AppInfoProvider.filterApp(packInfo.applicationInfo)){
taskInfo.setUserTask(true);
}else{
taskInfo.setUserTask(false);
}
} catch (NameNotFoundException e) {
taskInfo.setIcon(context.getResources().getDrawable(R.drawable.ic_launcher));
taskInfo.setName(packname);
e.printStackTrace();
}
taskInfos.add(taskInfo);
}
return taskInfos;
}
- 一键清理 杀死进程需要权限
android.permission.KILL_BACKGROUND_PROCESSES
杀死进程就是使用ActivityManager的killBackgroundProcess方法
public void killBackgroundProcesses(String packageName)
- 获取内存可用大小
public class ProcessStatusUtils {
/**
* 获取有多少个程序正处于运行状态.
* @param context
* @return
*/
public static int getProcessCount(Context context){
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
return am.getRunningAppProcesses().size();
}
/**
* 获取手机里面可用的内存空间
* @param context
* @return long类型的byte的值
*/
public static long getAvailRAM(Context context){
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo outInfo = new MemoryInfo();
am.getMemoryInfo(outInfo);
return outInfo.availMem;
}
//获取手机的总内存,Android的Api中没有提供获取总内存的方法,在linux系统中我们要通过这个文件才能得到总内存
public static long getTotalRAM(){
try {
File file = new File("/proc/meminfo");//Android系统这个文件的第一行就能得到总的内存大小
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String str = br.readLine();
//MemTotal: 513248 kB
char[] chars = str.toCharArray();
StringBuffer sb = new StringBuffer();
for(char c : chars){
if(c>='0'&&c<='9'){
sb.append(c);
}
}
return Integer.parseInt(sb.toString())*1024;//得到的是多少kb,将kb转成b
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
}
//上面的方法都是得到的多少比特的大小,在使用中可以使用Formatter.formatFileSize(Context context, long b)将其自动转成K,M,G等
- Tomcat用户权限设置
- 优化算法——模拟退火算法
- 绘制动态心形图案::R语言绘制心形图
- 物化视图中的统计信息导致的查询问题分析和修复 (r7笔记第47天)
- R语言之系统聚类(层次)分析之图谱形式完整版
- Java操作数据库Spring(1)
- python基础知识——内置数据结构(集合)
- 关于db link权限分配的苦旅(二)(r7笔记第45天)
- 简单易学的机器学习算法——在线顺序极限学习机OS-ELM
- Java操作数据库Spring(2)
- 解决SSH连接linux中文显示乱码问题
- 设计模式——类图以及类与类之间的关系
- sysdba登录报错insufficient privileges的原因分析(r7笔记第64天)
- JDBC基础入门(1)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 技术分享 | Online DDL 工具 gh-ost
- Spring Boot 整合Mybatis
- R语言进阶之时间序列分析
- Spring Boot 实现员工信息管理demo
- 如何把 Flutter 云端一体化做到极致?
- 微服务[学成在线] day16:基于Spring Security Oauth2开发认证服务
- 新的跨域策略:使用COOP、COEP为浏览器创建更安全的环境
- CVE-2020-1948:Dubbo Provider默认反序列化复现
- R语言进阶之因子分析
- Spring Boot 整合Thymeleaf
- Spring Boot 整合Shiro
- 微服务[学成在线] day01:CMS接口开发
- 微服务[学成在线] day02:CMS前端开发
- ggplot2| 绘制KEGG气泡图
- 微服务[学成在线] day03:CMS页面管理开发