TaskUtils

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;


import zz.itcast.mobileguardz10.R;
import zz.itcast.mobileguardz10.bean.TaskInfoBean;
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.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.SystemClock;
import android.text.GetChars;


public class TaskUtils {


/**
* 獲得正在運行的進程個數
* @param ctx
* @return
*/
public static int getRunningProcCount(Context ctx){

ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();

return runningAppProcesses.size();
}

/**
* 獲得可用內存
* @param ctx
* @return
*/
public static long getAvaiMemInfo(Context ctx) {


ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo outInfo = new MemoryInfo();
am.getMemoryInfo(outInfo);


return outInfo.availMem; // 可用內存


}

/**
* 獲得總內存大小 
* @return
*  byte 
*/
public static long getTotalMemInfo() {
// 讀取  /proc/meminfo 文件

try {
String path = "/proc/meminfo";
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));

String line = reader.readLine(); // MemTotal:         513744 kB
StringBuffer sb = new StringBuffer();

for(int i=0;i<line.length();i++){
char c = line.charAt(i);
if(c >='0' && c<='9'){
sb.append(c);
}
}

sb.toString();  // 513744

return Long.parseLong(sb.toString()) * 1024; //  513744 KB 


} catch (Exception e) {
e.printStackTrace();
}
return 0;
}

/**
* 獲得所有的正在運行的進程信息
* @param ctx
* @return
*/
public static List<TaskInfoBean> getAllTaskInfo(Context ctx){
List<TaskInfoBean> allTaskList = new ArrayList<TaskInfoBean>();

ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);

PackageManager pm = ctx.getPackageManager();

// 獲得所有的正在運行的進程信息
List<RunningAppProcessInfo> runningAppList = am.getRunningAppProcesses();
for (RunningAppProcessInfo runningAppInfo : runningAppList) {
TaskInfoBean taskBean = new TaskInfoBean();


allTaskList.add(taskBean);


// 獲得進程佔用的內存大小
// 獲得指定進程的內存信息, 參數有多少個進程ID,返回值就有多少個 MemoryInfo
android.os.Debug.MemoryInfo[] processMemoryInfo = am
.getProcessMemoryInfo(new int[] { runningAppInfo.pid });
taskBean.memSize = processMemoryInfo[0].getTotalPrivateDirty() * 1024;


try {
// 指定包名
taskBean.packageName = runningAppInfo.processName; // 進程名稱
// 與包名是一樣的


ApplicationInfo applicationInfo = pm.getApplicationInfo(
taskBean.packageName, 0);


// 應用的名稱
taskBean.appName = applicationInfo.loadLabel(pm).toString();
// 應用圖標
taskBean.appIcon = applicationInfo.loadIcon(pm);


// 判斷是否是系統應用
if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
taskBean.isSys = true;
} else {
taskBean.isSys = false;
}


} catch (Exception e) {
e.printStackTrace();


// 有些C進程,不能android應用,就不能獲得應用程序信息,所以,設置一些默認值
// 應用的名稱
taskBean.appName = taskBean.packageName;
// 應用圖標
taskBean.appIcon = ctx.getResources().getDrawable(R.drawable.ic_launcher);
// 系統進程
taskBean.isSys = true;


}
}

SystemClock.sleep(1000); // 休眠1秒,模擬耗時操作

return allTaskList;
}


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章