Skip to main content.

公告

今天把博客开通了,今后就给大家分享一些关于Android的信息.

搜索

友情链接

如何在Android中实现任务管理器

今天,我们来实现一个Android任务管理器,来简单管理Android系统中运行的程序进程,包括查看进程、杀死进程以及内存资源的查看,下面就一起看看这个任务管理器是如何实现的吧。

任务管理器可以实现的功能有:

1.查看当前系统下运行的所有的进程

2.可以查看每个进程的进程号、版本号以及内存占用情况

3.杀死进程(可以杀死全部进程或者杀死指定的进程)

4.查看系统剩余内存

效果图:                                                                          杀死全部进程

     

实现思路:

ActivityManager类可以获取到当前系统的所有进程,以及每个进程的信息,也可以杀死某个进程,

ActivityManager.getRunningAppProcesses();   获取系统的所有进程

ActivityManager.getProcessMemoryInfo(pids);  根据进程号获取每个进程的内存占用情况

ActivityManager.restartPackage(processName) ;  根据进程的包名杀死某个进程

PackageManager可以根据包名获取程序的图标、版本号、名字、权限、签名

核心代码:

	/*
	 * 获取所有进程及用户 的进程
	 */
	protected void initData() {
		runningAppProcessInfos =ActivityManager.getRunningAppProcesses(); //获取所有的进程
		userRunningAppProcessInfos = new ArrayList<ActivityManager.RunningAppProcessInfo>();//获取用户的进程
		for(int i = 0; i< runningAppProcessInfos.size();i++){
			 if("system".equals(runningAppProcessInfos.get(i).processName)
			||"android.process.media".equals(runningAppProcessInfos.get(i).processName)
			||"android.process.acore".equals(runningAppProcessInfos.get(i).processName)
			){
				 continue;
			 }
			 userRunningAppProcessInfos.add(runningAppProcessInfos.get(i));
		}
	}
注:杀死全部进程实际上杀死的是用户的所有进程,系统进程是无法杀死的,所以这里要获取到用户的所有的进程。

		    /*
		     * 获取某个进程占用的内存信息 
		     */
		    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
		    int[] pids = {userRunningAppProcessInfos.get(position).pid};
		    android.os.Debug.MemoryInfo[] memoryInfos =  am.getProcessMemoryInfo(pids);
		    int memorysize = memoryInfos[0].getTotalPrivateDirty();
		    tv_app_memory.setText("内存占用为 "+ memorysize +" KB");
public class TaskInfo {
	Context context ;
	PackageManager pm ;
	public TaskInfo(Context context) {
		this.context = context;
		pm = context.getPackageManager();
	}
	/*
	 * 根据包名 查询 图标
	 */
	public Drawable getAppIcon(String packname){
	  try {
			 ApplicationInfo info =	pm.getApplicationInfo(packname, 0); 
			 return info.loadIcon(pm);
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	/*
	 *获取程序的版本号  
	 */
	public String getAppVersion(String packname){
		
		  try {
			  PackageInfo packinfo =	pm.getPackageInfo(packname, 0);
			  return packinfo.versionName;
			} catch (NameNotFoundException e) {
				e.printStackTrace();
				return null;
			}
	}
	

	/*
	 * 获取程序的名字 
	 */
	public String getAppName(String packname){
		  try {
				 ApplicationInfo info =	pm.getApplicationInfo(packname, 0); 
				 return info.loadLabel(pm).toString();
			} catch (NameNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
	}
	/*
	 * 获取程序的权限
	 */
	public String[] getAppPremission(String packname){
		  try {
			  PackageInfo packinfo =	pm.getPackageInfo(packname, PackageManager.GET_PERMISSIONS);
			  //获取到所有的权限 
			  return packinfo.requestedPermissions;

			} catch (NameNotFoundException e) {
				e.printStackTrace();
				return null;
			}
	}
	
	
	/*
	 * 获取程序的签名 
	 */
	public String getAppSignature(String packname){
		  try {
			  PackageInfo packinfo =	pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
			  //获取到所有的权限 
			  return packinfo.signatures[0].toCharsString();

			} catch (NameNotFoundException e) {
				e.printStackTrace();
				return null;
			}
	}
}
	/*
	 * 杀死所有进程 
	 */
	private void killAll() {
		for (int i = 0 ; i< userRunningAppProcessInfos.size();i++){
			System.out.println(userRunningAppProcessInfos.get(i).processName);
			activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
		}
		// 更新显示的界面 
		pd.show();
		new Thread(){
			@Override
			public void run() {
				initData();
				Message msg = new Message();
				msg.what = GET_RUNNING_APP_FINISH;
				hander.sendMessage(msg);
			}
		}.start();
	}

	/*
	 * 杀死选择的进程 
	 */
	private void killSelected() {
		for (int i=0 ;i < isselected.size(); i++){
			if(isselected.get(i)){    //如果用户也选中则返回true
				//终止一个activity 需要用到 activitymanager
				activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
			}
		}
		//更新listview的显示  
		pd.show();
		new Thread(){
			@Override
			public void run() {
				initData();
				Message msg = new Message();
				msg.what = GET_RUNNING_APP_FINISH;
				hander.sendMessage(msg);
			}
		}.start();
	}
		/*
		 * 获取系统的剩余内存
		 */
		ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
		MemoryInfo outInfo =	new ActivityManager.MemoryInfo();
		am.getMemoryInfo(outInfo);
		long availMemorySize = outInfo.availMem;
		String strMemorySize = availMemorySize/1024/1024 + "MB";
这样一个简单的android任务管理器就完成了。

Posted by android_boy @ 2011-11-4 13:41:30 阅读(694) 评论(2)
上一篇:Android界面开发之ListView用法
下一篇:Android界面开发之Toast用法

Feedback

  1. 回复 2011-11-4 15:14:33 by 上海SEO

    换连接 QQ1282570027
  2. 回复 2012-2-2 18:01:58 by 追风人

    你好,看了你的博客,很受启发,能发一份android任务管理器的源码给我吗?

    这是我的邮箱 123337180@qq.com

你还可以输入600/600个字符 发表评论
称呼: (必填) 登录 | 开通博客
邮箱: (选填) 你的邮箱地址不会被公开
网站: (选填)
验证码: (必填)