获得运行中的进程数量和内存,进程信息,带CheckBox的ListView

时间:2021-08-23 14:43:48

45.获得运行中的进程数量和内存

PackageManager:包管理器,相当于程序管理器。获取的是静态的内容。

ActivityManager:进程管理器。管理的是手机的活动信息。获取的是动态内容。

获得运行中的进程数量需要用到ActivityManager

am.getRunningAppProcesses();


获得手机可用的剩余内存和总内存(RAM)也需要用到ActivityManager:

MemoryInfo outInfo = new MemoryInfo();

am.getMemoryInfo(outInfo);

long availMem = outInfo.availMem;

long totalMem = outInfo.totalMem;

再格式转换一下:

String avail = Formatter.formatFileSize(this, availMem);

String total = Formatter.formatFileSize(this, totalMem);

am的getMemoryInfo方法没有返回值,所以它的信息会保存在outInfo中。

当代码没错而eclipse提示有错误的时候,可用Project-->Clean...一下,运行时还报错的话,如果错误不影响程序的运行,可以Problems-->error处右键Delete忽略掉该错误。

用am获得手机可用总内存只能在4.0以上的版本获得。

手机可用总内存实际上是在Linux系统的一个文件中(proc/meminfo)存放:

cmd-->adb shell --> ls -l --> cd proc -->ls -l -->cd meminfo

try {
File file = new File("/proc/meminfo");
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = br.readLine();
//MemTotal 1840968kB
StringBuilder sb = new StringBuilder();
for(char c : line.toCharArray()){
if(c >= '0' && c <= '9'){
sb.append(c);
}
}
return Long.parseLong(sb.toString())*1024;
} catch (Exception e) {
e.printStackTrace();
return 0;
}

返回的单位是kB,再乘1024返回的单位是 Bytes,之后再格式转换


46.获取手机中正在运行的进程信息

先获得手机中所有正在运行中的进程

List<RunningAppProcessInfo> infos = am.getRunningAppProcesses();

for(RunningAppProcessInfo info : infos){

再遍历获取进程的进程名,进程名实际上就是包名。

String packname = info.processName;

根据当前进程的id获得当前进程所占内存信息

MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(new int[]{info.pid});

long memSize = memoryInfo[0].getTotalPrivateDirty()*1024;

用pm根据包名获得对应应用程序的信息

ApplicationInfo applicationInfo = pm.getApplicationInfo(packname, 0);

得到应用程序的信息后就可以load图标、程序名等信息。

}


47.带checkbox的ListView

带checkbox的ListView在复用缓存的时候,checkbox的选中状态也被复用,所有达不到checkbox的真正用途了,为了解决这个问题,可以把checkbox的选中状态记录到bean里面,并设置多选框不可点击、不可获得焦点。然后再给ListView设置item的监听器,通过holder设置多选框的状态,通过bean记录多选框的状态。