获取所有运行中进程的信息及常规操作
发布日期:2021-06-30 18:39:31 浏览次数:2 分类:技术文章

本文共 5667 字,大约阅读时间需要 18 分钟。

1、进程的数据封装类

import android.graphics.drawable.Drawable;/** * 进程的数据封装类 * @author Administrator * */public class TaskBean {
private boolean isChecked;//是否被选中 private Drawable icon;//apk的图标 private String name;//apk的名字 private String packName;//apk的包名 private long memSize;//apk占用的内存大小 private boolean isSystem;//是否系统apk public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPackName() { return packName; } public void setPackName(String packName) { this.packName = packName; } public long getMemSize() { return memSize; } public void setMemSize(long memSize) { this.memSize = memSize; } public boolean isSystem() { return isSystem; } public void setSystem(boolean isSystem) { this.isSystem = isSystem; } public boolean isChecked() { return isChecked; } public void setChecked(boolean isChecked) { this.isChecked = isChecked; }}

2、获取所有运行中进程的信息工具类

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import android.app.ActivityManager;import android.app.ActivityManager.MemoryInfo;import android.app.ActivityManager.RunningAppProcessInfo;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;/** * 获取所有运行中进程的信息 *  * @author Administrator *  */public class TaskManagerEngine {
/** * @return 所有运行中的进程数据 */ public static List
getAllRunningTaskInfos(Context context) { List
datas = new ArrayList
(); // 获取运行中的进程 ActivityManager am = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); // 获取包管理器 PackageManager pm = context.getPackageManager(); // 获取运行中的进程 List
runningAppProcesses = am .getRunningAppProcesses(); for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) { TaskBean bean = new TaskBean(); // apk的 包名 String processName = runningAppProcessInfo.processName;// 包名 // 设置apk的包名 bean.setPackName(processName); // 获取apk的图标和名字 //有些进程是无名进程 PackageInfo packageInfo = null; try { packageInfo = pm.getPackageInfo(processName, 0); } catch (NameNotFoundException e) { continue;//继续循环 不添加没有名字的进程 } //获取apk的图标 bean.setIcon(packageInfo.applicationInfo.loadIcon(pm)); //获取apk的名字 bean.setName(packageInfo.applicationInfo.loadLabel(pm) + ""); if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0){ //系统apk bean.setSystem(true); } else { bean.setSystem(false);//用户apk } //获取占用的内存大小 android.os.Debug.MemoryInfo[] processMemoryInfo = am.getProcessMemoryInfo(new int[]{runningAppProcessInfo.pid}); //获取占用内存 以byte单位 long totalPrivateDirty = processMemoryInfo[0].getTotalPrivateDirty() * 1024;// 获取运行中占用的内存 bean.setMemSize(totalPrivateDirty); datas.add(bean);// 添加一个进程信息 } // end for return datas; } /** * @return 获取可用内存的大小 */ public static long getAvailMemSize(Context context) { long size = 0; ActivityManager am = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); MemoryInfo outInfo = new MemoryInfo(); // MemoryInfo 存放内存的信息 am.getMemoryInfo(outInfo); // 把kb 转换成byte size = outInfo.availMem; return size; } /** * @return 总内存大小 */ public static long getTotalMemSize(Context context) { long size = 0; /* * //Activity管理器,获取运行相关信息 ActivityManager am = (ActivityManager) * context.getSystemService(Context.ACTIVITY_SERVICE); * * MemoryInfo outInfo = new MemoryInfo(); //MemoryInfo 存放内存的信息 * am.getMemoryInfo(outInfo ); //获取总内存大小,16级别以上 ,读取内存文件 size = * outInfo.totalMem; */ // 读取配置文件来获取总内存大小 File file = new File("/proc/meminfo"); try { BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(file))); // //zip流 pipe流 String totalMemInfo = reader.readLine(); int startIndex = totalMemInfo.indexOf(':'); int endIndex = totalMemInfo.indexOf('k'); // 单位是kb totalMemInfo = totalMemInfo.substring(startIndex + 1, endIndex) .trim(); size = Long.parseLong(totalMemInfo); size *= 1024;// byte单位 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return size; }}

3、另外,可以使用系统提供的api把byte自动转成KB、MB、GB等单位

Formatter.formatFileSize(getApplicationContext(),long类型字节大小);

4、清理进程

// 清理进程ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);am.killBackgroundProcesses(bean.getPackName());需要在清单文件中添加如下权限:

转载地址:https://linqiarui.blog.csdn.net/article/details/51171635 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:集合在foreach时移除数据
下一篇:注册删除apk的广播接受者

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月26日 15时00分12秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章