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记录多选框的状态。