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

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

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

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

4.查看系统剩余内存

                                                                                              杀死全部进程


     

实现思路:

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

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

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

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

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

核心代码:


1. /*
2.  * 获取所有进程及用户 的进程
3.  */  
4. protected void initData() {  
5. //获取所有的进程  
6. new ArrayList<ActivityManager.RunningAppProcessInfo>();//获取用户的进程  
7. for(int i = 0; i< runningAppProcessInfos.size();i++){  
8. if("system".equals(runningAppProcessInfos.get(i).processName)  
9. "android.process.media".equals(runningAppProcessInfos.get(i).processName)  
10. "android.process.acore".equals(runningAppProcessInfos.get(i).processName)  
11.         ){  
12. continue;  
13.          }  
14.          userRunningAppProcessInfos.add(runningAppProcessInfos.get(i));  
15.     }  
16. }


注:杀死全部进程实际上杀死的是用户的所有进程,系统进程是无法杀死的,所以这里要获取到用户的所有的进程。



1. /*
2.  * 获取某个进程占用的内存信息 
3.  */  
4. ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
5. int[] pids = {userRunningAppProcessInfos.get(position).pid};  
6. android.os.Debug.MemoryInfo[] memoryInfos =  am.getProcessMemoryInfo(pids);  
7. int memorysize = memoryInfos[0].getTotalPrivateDirty();  
8. tv_app_memory.setText("内存占用为 "+ memorysize +" KB");





1. public class TaskInfo {  
2.     Context context ;  
3.     PackageManager pm ;  
4. public TaskInfo(Context context) {  
5. this.context = context;  
6.         pm = context.getPackageManager();  
7.     }  
8. /*
9.      * 根据包名 查询 图标
10.      */  
11. public Drawable getAppIcon(String packname){  
12. try {  
13. 0);   
14. return info.loadIcon(pm);  
15. catch (NameNotFoundException e) {  
16. // TODO Auto-generated catch block  
17.             e.printStackTrace();  
18. return null;  
19.         }  
20.     }  
21.       
22. /*
23.      *获取程序的版本号  
24.      */  
25. public String getAppVersion(String packname){  
26.           
27. try {  
28. 0);  
29. return packinfo.versionName;  
30. catch (NameNotFoundException e) {  
31.                 e.printStackTrace();  
32. return null;  
33.             }  
34.     }  
35.       
36.   
37. /*
38.      * 获取程序的名字 
39.      */  
40. public String getAppName(String packname){  
41. try {  
42. 0);   
43. return info.loadLabel(pm).toString();  
44. catch (NameNotFoundException e) {  
45. // TODO Auto-generated catch block  
46.                 e.printStackTrace();  
47. return null;  
48.             }  
49.     }  
50. /*
51.      * 获取程序的权限
52.      */  
53. public String[] getAppPremission(String packname){  
54. try {  
55.               PackageInfo packinfo =    pm.getPackageInfo(packname, PackageManager.GET_PERMISSIONS);  
56. //获取到所有的权限   
57. return packinfo.requestedPermissions;  
58.   
59. catch (NameNotFoundException e) {  
60.                 e.printStackTrace();  
61. return null;  
62.             }  
63.     }  
64.       
65.       
66. /*
67.      * 获取程序的签名 
68.      */  
69. public String getAppSignature(String packname){  
70. try {  
71.               PackageInfo packinfo =    pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);  
72. //获取到所有的权限   
73. return packinfo.signatures[0].toCharsString();  
74.   
75. catch (NameNotFoundException e) {  
76.                 e.printStackTrace();  
77. return null;  
78.             }  
79.     }  
80. }

1. /*
2.  * 杀死所有进程 
3.  */  
4. private void killAll() {  
5. for (int i = 0 ; i< userRunningAppProcessInfos.size();i++){  
6.         System.out.println(userRunningAppProcessInfos.get(i).processName);  
7.         activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);  
8.     }  
9. // 更新显示的界面   
10.     pd.show();  
11. new Thread(){  
12. @Override  
13. public void run() {  
14.             initData();  
15. new Message();  
16.             msg.what = GET_RUNNING_APP_FINISH;  
17.             hander.sendMessage(msg);  
18.         }  
19.     }.start();  
20. }  
21.   
22. /*
23.  * 杀死选择的进程 
24.  */  
25. private void killSelected() {  
26. for (int i=0 ;i < isselected.size(); i++){  
27. if(isselected.get(i)){    //如果用户也选中则返回true  
28. //终止一个activity 需要用到 activitymanager  
29.             activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);  
30.         }  
31.     }  
32. //更新listview的显示    
33.     pd.show();  
34. new Thread(){  
35. @Override  
36. public void run() {  
37.             initData();  
38. new Message();  
39.             msg.what = GET_RUNNING_APP_FINISH;  
40.             hander.sendMessage(msg);  
41.         }  
42.     }.start();  
43. }



1. /*
2.  * 获取系统的剩余内存
3.  */  
4. ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
5. MemoryInfo outInfo =    new ActivityManager.MemoryInfo();  
6. am.getMemoryInfo(outInfo);  
7. long availMemorySize = outInfo.availMem;  
8. String strMemorySize = availMemorySize/1024/1024 + "MB";