关于软件运行相关的方法(占用内存,总内存,进程数。。。)

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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值