package com.caigang.process.util;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.util.Log;
public class ProcessMemoryUtil {
private static final int INDEX_FIRST = -1;
private static final int INDEX_PID = INDEX_FIRST + 1;
private static final int INDEX_CPU = INDEX_FIRST + 2;
private static final int INDEX_STAT = INDEX_FIRST + 3;
private static final int INDEX_THR = INDEX_FIRST + 4;
private static final int INDEX_VSS = INDEX_FIRST + 5;
private static final int INDEX_RSS = INDEX_FIRST + 6;
private static final int INDEX_PCY = INDEX_FIRST + 7;
private static final int INDEX_UID = INDEX_FIRST + 8;
private static final int INDEX_NAME = INDEX_FIRST + 9;
private static final int Length_ProcStat = 9;
private List<String[]> PMUList = null;
public ProcessMemoryUtil() {
initPMUtil();
}
private String getProcessRunningInfo() {
Log.i("fetch_process_info", "start. . . . ");
String result = null;
CMDExecute cmdexe = new CMDExecute();
try {
String[] args = {"/system/bin/top", "-n", "1"};
result = cmdexe.run(args, "/system/bin/");
} catch (IOException ex) {
Log.i("fetch_process_info", "ex=" + ex.toString());
}
return result;
}
private int parseProcessRunningInfo(String infoString) {
String tempString = "";
boolean bIsProcInfo = false;
String[] rows = null;
String[] columns = null;
rows = infoString.split("[\n]+"); // ʹ��������ʽ�ָ��ַ���
for (int i = 0; i < rows.length; i++) {
tempString = rows[i];
if (tempString.indexOf("PID") == -1) {
if (bIsProcInfo == true) {
tempString = tempString.trim();
columns = tempString.split("[ ]+");
if (columns.length == Length_ProcStat) {
PMUList.add(columns);
}
}
} else {
bIsProcInfo = true;
}
}
return PMUList.size();
}
// ��ʼ�����н��̵�CPU���ڴ��б����ڼ���ÿ�����̵���Ϣ
public void initPMUtil() {
PMUList = new ArrayList<String[]>();
String resultString = getProcessRunningInfo();
parseProcessRunningInfo(resultString);
}
// ���ݽ�������ȡCPU���ڴ���Ϣ
public String getMemInfoByName(String procName) {
String result = "";
String tempString = "";
for (Iterator<String[]> iterator = PMUList.iterator(); iterator.hasNext();) {
String[] item = (String[]) iterator.next();
tempString = item[INDEX_NAME];
if (tempString != null && tempString.equals(procName)) {
result = "CPU:" + item[INDEX_CPU]
+ " �ڴ�:" + item[INDEX_RSS];
break;
}
}
return result;
}
// ���ݽ���ID��ȡCPU���ڴ���Ϣ
public String getMemInfoByPid(int pid) {
String result = "";
String tempPidString = "";
int tempPid = 0;
int count = PMUList.size();
for (int i = 0; i < count; i++) {
String[] item = PMUList.get(i);
tempPidString = item[INDEX_PID];
if (tempPidString == null) {
continue;
}
tempPid = Integer.parseInt(tempPidString);
if (tempPid == pid) {
result = "CPU:" + item[INDEX_CPU]
+ " �ڴ�:" + item[INDEX_RSS];
break;
}
}
return result;
}
// ���ݽ���ID��ȡ�ڴ���Ϣ
public String getMemorySizeByPid(int pid) {
String result = "";
String tempPidString = "";
int tempPid = 0;
int count = PMUList.size();
for (int i = 0; i < count; i++) {
String[] item = PMUList.get(i);
tempPidString = item[INDEX_PID];
if (tempPidString == null) {
continue;
}
tempPid = Integer.parseInt(tempPidString);
if (tempPid == pid) {
int size = item[INDEX_RSS].length();
result = item[INDEX_RSS].substring(0,size-1);
break;
}
}
return result;
}
// ���ݽ���ID��ȡCPU��Ϣ
public String getCPUSizeByPid(int pid) {
String result = "";
String tempPidString = "";
int tempPid = 0;
int count = PMUList.size();
for (int i = 0; i < count; i++) {
String[] item = PMUList.get(i);
tempPidString = item[INDEX_PID];
if (tempPidString == null) {
continue;
}
tempPid = Integer.parseInt(tempPidString);
if (tempPid == pid) {
result = item[INDEX_CPU];
break;
}
}
return result;
}
}