任务管理器可以实现的功能有:
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";