Android 手機衛士12--進程管理,android12--

來源:互聯網
上載者:User

Android 手機衛士12--進程管理,android12--

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,擷取activityManager152         ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);153         //2,殺死指定包名進程(許可權)154         am.killBackgroundProcesses(processInfo.packageName);155     }156 }
ProcessInfoProvider

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.