首页 > 代码库 > Android 手机卫士12--进程管理
Android 手机卫士12--进程管理
1.本进程不能被选中,所以先将checkbox隐藏掉--手机卫士 不能自杀
if(getItem(position).packageName.equals(getPackageName())){ holder.cb_box.setVisibility(View.GONE); }else{ holder.cb_box.setVisibility(View.VISIBLE); }
2.清理选中进程
private void clearAll() { //1,获取选中进程 //2,创建一个记录需要杀死的进程的集合 List<ProcessInfo> killProcessList = new ArrayList<ProcessInfo>(); for(ProcessInfo processInfo:mCustomerList){ if(processInfo.getPackageName().equals(getPackageName())){ continue; } if(processInfo.isCheck){ //不能在集合循环过程中去移除集合中的对象 // mCustomerList.remove(processInfo); //3,记录需要杀死的用户进程 killProcessList.add(processInfo); } } for(ProcessInfo processInfo:mSystemList){ if(processInfo.isCheck){ //4,记录需要杀死的系统进程 killProcessList.add(processInfo); } } //5,循环遍历killProcessList,然后去移除mCustomerList和mSystemList中的对象 long totalReleaseSpace = 0; for (ProcessInfo processInfo : killProcessList) { //6,判断当前进程在那个集合中,从所在集合中移除 if(mCustomerList.contains(processInfo)){ mCustomerList.remove(processInfo); } if(mSystemList.contains(processInfo)){ mSystemList.remove(processInfo); } //7,杀死记录在killProcessList中的进程 ProcessInfoProvider.killProcess(this,processInfo); //记录释放空间的总大小 totalReleaseSpace += processInfo.memSize; } //8,在集合改变后,需要通知数据适配器刷新 if(mAdapter!=null){ mAdapter.notifyDataSetChanged(); } //9,进程总数的更新 mProcessCount -= killProcessList.size(); //10,更新可用剩余空间(释放空间+原有剩余空间 == 当前剩余空间) mAvailSpace += totalReleaseSpace; //11,根据进程总数和剩余空间大小 tv_process_count.setText("进程总数:"+mProcessCount); tv_memory_info.setText("剩余/总共"+Formatter.formatFileSize(this, mAvailSpace)+"/"+mStrTotalSpace); //12,通过吐司告知用户,释放了多少空间,杀死了几个进程, String totalRelease = Formatter.formatFileSize(this, totalReleaseSpace); // ToastUtil.show(getApplicationContext(), "杀死了"+killProcessList.size()+"个进程,释放了"+totalRelease+"空间"); // jni java--c c---java //占位符指定数据%d代表整数占位符,%s代表字符串占位符 ToastUtil.show(getApplicationContext(), String.format("杀死了%d进程,释放了%s空间", killProcessList.size(),totalRelease)); }
3.ProcessInfoProvider.java
1 package com.itheima.mobilesafe74.engine; 2 3 import java.io.BufferedReader; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 import com.itheima.mobilesafe74.R; 11 import com.itheima.mobilesafe74.db.domain.ProcessInfo; 12 13 import android.app.ActivityManager; 14 import android.app.ActivityManager.MemoryInfo; 15 import android.app.ActivityManager.RunningAppProcessInfo; 16 import android.content.Context; 17 import android.content.pm.ApplicationInfo; 18 import android.content.pm.PackageManager; 19 import android.content.pm.PackageManager.NameNotFoundException; 20 21 public class ProcessInfoProvider { 22 //获取进程总数的方法 23 public static int getProcessCount(Context ctx){ 24 //1,获取activityManager 25 ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 26 //2,获取正在运行进程的集合 27 List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses(); 28 //3,返回集合的总数 29 return runningAppProcesses.size(); 30 } 31 32 33 /** 34 * @param ctx 35 * @return 返回可用的内存数 bytes 36 */ 37 public static long getAvailSpace(Context ctx){ 38 //1,获取activityManager 39 ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 40 //2,构建存储可用内存的对象 41 MemoryInfo memoryInfo = new MemoryInfo(); 42 //3,给memoryInfo对象赋(可用内存)值 43 am.getMemoryInfo(memoryInfo); 44 //4,获取memoryInfo中相应可用内存大小 45 return memoryInfo.availMem; 46 } 47 48 49 /** 50 * @param ctx 51 * @return 返回总的内存数 单位为bytes 返回0说明异常 52 */ 53 public static long getTotalSpace(Context ctx){ 54 /*//1,获取activityManager 55 ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 56 //2,构建存储可用内存的对象 57 MemoryInfo memoryInfo = new MemoryInfo(); 58 //3,给memoryInfo对象赋(可用内存)值 59 am.getMemoryInfo(memoryInfo); 60 //4,获取memoryInfo中相应可用内存大小 61 return memoryInfo.totalMem;*/ 62 63 //内存大小写入文件中,读取proc/meminfo文件,读取第一行,获取数字字符,转换成bytes返回 64 FileReader fileReader = null; 65 BufferedReader bufferedReader = null; 66 try { 67 fileReader= new FileReader("proc/meminfo"); 68 bufferedReader = new BufferedReader(fileReader); 69 String lineOne = bufferedReader.readLine(); 70 //将字符串转换成字符的数组 71 char[] charArray = lineOne.toCharArray(); 72 //循环遍历每一个字符,如果此字符的ASCII码在0到9的区域内,说明此字符有效 73 StringBuffer stringBuffer = new StringBuffer(); 74 for (char c : charArray) { 75 if(c>=‘0‘ && c<=‘9‘){ 76 stringBuffer.append(c); 77 } 78 } 79 return Long.parseLong(stringBuffer.toString())*1024; 80 } catch (Exception e) { 81 e.printStackTrace(); 82 }finally{ 83 try { 84 if(fileReader!=null && bufferedReader!=null){ 85 fileReader.close(); 86 bufferedReader.close(); 87 } 88 } catch (IOException e) { 89 e.printStackTrace(); 90 } 91 } 92 return 0; 93 } 94 95 /** 96 * @param ctx 上下文环境 97 * @return 当前手机正在运行的进程的相关信息 98 */ 99 public static List<ProcessInfo> getProcessInfo(Context ctx){ 100 //获取进程相关信息 101 List<ProcessInfo> processInfoList = new ArrayList<ProcessInfo>(); 102 //1,activityManager管理者对象和PackageManager管理者对象 103 ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 104 PackageManager pm = ctx.getPackageManager(); 105 //2,获取正在运行的进程的集合 106 List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses(); 107 108 //3,循环遍历上诉集合,获取进程相关信息(名称,包名,图标,使用内存大小,是否为系统进程(状态机)) 109 for (RunningAppProcessInfo info : runningAppProcesses) { 110 ProcessInfo processInfo = new ProcessInfo(); 111 //4,获取进程的名称 == 应用的包名 112 processInfo.packageName = info.processName; 113 //5,获取进程占用的内存大小(传递一个进程对应的pid数组) 114 android.os.Debug.MemoryInfo[] processMemoryInfo = am.getProcessMemoryInfo(new int[]{info.pid}); 115 //6,返回数组中索引位置为0的对象,为当前进程的内存信息的对象 116 android.os.Debug.MemoryInfo memoryInfo = processMemoryInfo[0]; 117 //7,获取已使用的大小 118 processInfo.memSize = memoryInfo.getTotalPrivateDirty()*1024; 119 120 try { 121 ApplicationInfo applicationInfo = pm.getApplicationInfo(processInfo.packageName, 0); 122 //8,获取应用的名称 123 processInfo.name = applicationInfo.loadLabel(pm).toString(); 124 //9,获取应用的图标 125 processInfo.icon = applicationInfo.loadIcon(pm); 126 //10,判断是否为系统进程 127 if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM){ 128 processInfo.isSystem = true; 129 }else{ 130 processInfo.isSystem = false; 131 } 132 } catch (NameNotFoundException e) { 133 //需要处理 134 processInfo.name = info.processName; 135 processInfo.icon = ctx.getResources().getDrawable(R.drawable.ic_launcher); 136 processInfo.isSystem = true; 137 e.printStackTrace(); 138 } 139 processInfoList.add(processInfo); 140 } 141 return processInfoList; 142 } 143 144 145 /** 146 * 杀进程方法 147 * @param ctx 上下文环境 148 * @param processInfo 杀死进程所在的javabean的对象 149 */ 150 public static void killProcess(Context ctx,ProcessInfo processInfo) { 151 //1,获取activityManager 152 ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 153 //2,杀死指定包名进程(权限) 154 am.killBackgroundProcesses(processInfo.packageName); 155 } 156 }
Android 手机卫士12--进程管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。