进程信息获取
步骤:1)获取进程的应用的图标,进程的包名、可用内存,是否用户进程,是否被选中(checkbox) 2)通过ActivityManager和PackageManager获取相关的信息 |
核心代码:
|
SystemInfoUtils.java
|
获取总内存: /proc/meminfo文件里面的信息 meminfo: /proc/cpuinfo文件里面的信息 cpuinfo: |
问题1:低版本的不支持 // 1、获取总内存:在api16以上可以用
/*ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo outInfo = new MemoryInfo();
activityManager.getMemoryInfo(outInfo);
long totalMem = outInfo.totalMem;*/
上面的获取总内存,要api16才支持,所以用下面的代码; /**
* 3、返回总的内存
* @param context 上下文
* @return 返回总的内存
*/
@SuppressLint("NewApi") //totalMem,需要api16才支持
public static long getTotalMemory(Context context) {
// 1、获取总内存:在api16以上可以用
/*ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo outInfo = new MemoryInfo();
activityManager.getMemoryInfo(outInfo);
long totalMem = outInfo.totalMem;*/
// 2、获取总内存:在低版本的也可以用
BufferedReader br = null;
long totalMem = 0;
try {
File meminfo = new File("/proc/meminfo");
FileInputStream fis = new FileInputStream(meminfo);
br = new BufferedReader(new InputStreamReader(fis));
String line = br.readLine();
StringBuilder sb = new StringBuilder();
char[] charArray = line.toCharArray();
for (char c : charArray) {
if (c >= '0' && c <= '9') {// 是数字
sb.append(c);
}
}
String string = sb.toString();
totalMem = Long.parseLong(string) * 1000;// 由于在/pro/meninfo下获取总内存单位是KB.需要乘以1000
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
br = null;
}
}
return totalMem;
} |