Android实现任务管理器

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

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

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

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

4.查看系统剩余内存


效果图:                                                                                               杀死全部进程

     

实现思路:

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

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

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

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


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


核心代码:

	/*
	 * 获取所有进程及用户 的进程
	 */
	protected void initData() {
		runningAppProcessInfos =ActivityManager.getRunningAppProcesses(); //获取所有的进程
		userRunningAppProcessInfos = new ArrayList();//获取用户的进程
		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";


您想快速达成您的目标和实现梦想吗?请加QQ:673220883 每天为您提供了大量励志,视频,销售,管理等-经典文章,免费学习。此QQ空间已改变了千万人的命运。陈安之和您一起开始您的梦想之旅!陈安之老师全国课程报名热线:131 6187 6870 

 

精彩分享: 如果你现在没有目标,对未来很迷茫、来看下

精彩分享: 俞洪敏:一辈子只做一件事 不要想太多 

精彩分享: 男人的这一百个秘密,我不说你一辈子也不可能知道!

精彩分享: 人临终前最遗憾的25件事,别让这些遗憾 变成你的遗憾

精彩分享: 6个步骤,助你打破聊天尴尬局面,推荐阅读
精彩分享:  告诉自己我可以输,但我绝不放弃
精彩分享: 业务高手不想让别人知道的沟通秘籍
精彩分享: 陈安之教你三十岁前如何挣到五百万,不管男女都花上几分钟进来看完
精彩分享: 乔布斯,不为人知的故事!斯坦福大学演讲
精彩分享: 拖延等于死亡---改变千万人生的一堂课!
精彩分享: 为什么你是一个有才华的穷人?让你受益终身的文章!
精彩分享: 人生就像一杯茶,不会哭一辈子,但总会一阵子!


你可能感兴趣的:(Android)