package com.example.mobilesafe.engine;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.LongBuffer;
import java.util.ArrayList;
import java.util.List;
import com.example.mobilesafe.R;
import com.example.mobilesafe.bean.RunningAppInfo;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable;
import android.os.Environment;
public class AppProcessEngine {
/**
* 查询正在运行的进程数
*
* @param mc
* 上下文
* @return 正在运行的进程数
*/
public static int getProcessCount(Context mc) {
ActivityManager am = (ActivityManager) mc
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcesses = am
.getRunningAppProcesses();
return runningAppProcesses.size();
}
/**
* 返回可用运行内存空间大小 bytes
*
* @param mc
* 上下文
* @return 可用运行内存空间大小 bytes
*/
public static long getAvlibeProcessSpace(Context mc) {
ActivityManager am = (ActivityManager) mc
.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mem = new MemoryInfo();
am.getMemoryInfo(mem);
return mem.availMem;
}
/**
* 计算运行内存总大小
*
* @return 计算运行内存总大小
*/
public static long getAllProcessSpace() {
BufferedReader br = null;
try {
// "proc/meminfo"
String path = "proc" + File.separator + "meminfo";
br = new BufferedReader(new FileReader(new File(path)));
char[] buf = br.readLine().toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for (char b : buf) {
if (b >= '0' && b <= '9')
stringBuilder.append(b);
}
return Long.parseLong(stringBuilder.toString()) * 1024;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return 0;
}
/**
* 返回进程中APP的信息集合.
*
* ActivityManager 应用运行起来的信息在这里
*
* PackageManager 应用本身不需要运行起来就有的的信息
*
* @param mc
* 上下文
* @return 进程中APP的信息集合
*/
public static List<RunningAppInfo> getProcessAppInfoList(Context mc) {
// 得到两个管理者
PackageManager pm = mc.getPackageManager();
ActivityManager am = (ActivityManager) mc
.getSystemService(Context.ACTIVITY_SERVICE);
// 创建一个放置进程中运行的APP信息的集合
ArrayList<RunningAppInfo> runningAppInfoList = new ArrayList<RunningAppInfo>();
// 得到正在运行的APP信息集合
List<RunningAppProcessInfo> RunningAppProcessInfoList = am
.getRunningAppProcesses();
// 遍历这个集合,从中取信息
for (RunningAppProcessInfo info : RunningAppProcessInfoList) {
// 自己编写的类,用于放置进程app信息
RunningAppInfo rai = new RunningAppInfo();
// 取到包名
rai.packageName = info.processName;
// 用pid结合ActivityManager取到占用内存信息
android.os.Debug.MemoryInfo[] processMemoryInfo = am
.getProcessMemoryInfo(new int[] { info.pid });
android.os.Debug.MemoryInfo memoryInfo = processMemoryInfo[0];
rai.dirtySpace = memoryInfo.getTotalPrivateDirty() * 1024;
try {
// 用包名结合PackageManager得到ApplicationInfo
// 里面有应用名,应用图片,应用状态等信息
ApplicationInfo applicationInfo = pm.getApplicationInfo(
info.processName, 0);
rai.icon = applicationInfo.loadIcon(pm);
rai.name = applicationInfo.loadLabel(pm).toString();
if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) {
rai.isSystem = true;
} else {
rai.isSystem = false;
}
} catch (Exception e) {
rai.name = rai.packageName;
rai.icon = mc.getResources()
.getDrawable(R.drawable.ic_launcher);
rai.isSystem = true;
}
rai.isCheck = false;
runningAppInfoList.add(rai);
}
return runningAppInfoList;
}
/**
* 根据包名杀死一个进程
*
* @param mc
* 上下文
* @param app
* 包含包名的一个进程信息
*/
public static void KillProcess(Context mc, RunningAppInfo app) {
ActivityManager am = (ActivityManager) mc
.getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcesses(app.packageName);
}
}
package com.example.mobilesafe.bean;
import android.graphics.drawable.Drawable;
public class RunningAppInfo {
public String name;
public String packageName;
public Drawable icon;
/**
* 占用内存大小
*/
public long dirtySpace;
public boolean isCheck;
public boolean isSystem;
}