Android平台下实现一个进程管理器  

《枚举Android系统的进程、任务和服务的息》中,实现了一个简单的监控Android平台下的系统进程,任务,服务信息的小工具。在本文中,我将对这个小工具中的系统进程信息部分,进一步的完善。从用户的角度出发,将系统的任务信息Task和服务信息Service全部显示出来的意义不是很大,因此本文将不会对任务和服务两部分内容对任何更新。 

介绍之前,先给大家看看程序执行后的界面,首先了解大致的功能,然后理解起来,会更加得心应手。 

1、  获取系统进程列表,并加载进程名、CPU占用情况、内存使用情况

1.jpg

 

 


2、  点击某一个进程之后,让用户选择操作:“查看详情”和“结束进程”

 

2.jpg

 


3、  显示进程的详细信息:包括了进程的安装包路径、版权信息、用户权限、拥有的服务、和拥有的活动,等

3.jpg

 

 

4.jpg

 

 


4、  程序退出的方式

 

5.jpg

 

 


5、  任务列表 和 服务列表


6.jpg

 

 

7.jpg

 

8.jpg

 

 

9.jpg

 

 

在对界面和主要功能有一个大致了解之后,我们就开始编写我们的代码了。 

一、界面布局 

本文对整个功能界面采用了选项卡式的布局,布局文件如下:

main.xml

 

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <TabHost xmlns:android=”http://schemas.android.com/apk/res/android”
  3. android:id=”@android:id/tabhost”
  4. android:layout_width=”fill_parent”
  5. android:layout_height=”fill_parent”>
  6. <LinearLayout android:orientation=”vertical”
  7. android:layout_width=”fill_parent”
  8. android:layout_height=”fill_parent”
  9. android:padding=”2dp”>
  10. <TabWidget android:id=”@android:id/tabs”
  11. android:layout_width=”fill_parent”
  12. android:layout_height=”wrap_content” />
  13. <FrameLayout android:id=”@android:id/tabcontent”
  14. android:layout_width=”fill_parent”
  15. android:layout_height=”fill_parent”
  16. android:padding=”5dp” />
  17. </LinearLayout>
  18. </TabHost>

 

 

每一个选项卡的内容都是一个列表ListView,分别用于显示系统的进程、任务和服务列表,布局文件我们就此略过了。  在进程的详情中,我们使用不同背景色的TextView作为一个数据部分的标题,这样给人视觉上一个比较清晰的层次感,代码如下:整个详情信息是一个ScrollView,在第一行中嵌入了一个Button,其他行的数据显示都比较简单,大家看看我的控件ID就差不多知道这个控件的意思了。proc_detail.xml

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <ScrollView
  3. xmlns:android=”http://schemas.android.com/apk/res/android”
  4. android:layout_height=”wrap_content”
  5. android:layout_width=”match_parent”
  6. android:scrollbars=”none”>
  7. <LinearLayout
  8. android:id=”@+id/linearlayout1″
  9. android:layout_width=”fill_parent”
  10. android:layout_height=”fill_parent”
  11. android:orientation=”vertical”
  12. android:paddingLeft=”3dip”
  13. android:paddingRight=”3dip”
  14. android:paddingTop=”1dip”
  15. android:paddingBottom=”1dip”>
  16. <RelativeLayout android:layout_width=”match_parent”
  17. android:layout_height=”27dip”
  18. android:background=”#555555″
  19. android:id=”@+id/relativeLayout1″>
  20. <TextView android:textSize=”7pt”
  21. android:layout_alignParentLeft=”true”
  22. android:id=”@+id/textView1″
  23. android:layout_width=”wrap_content”
  24. android:layout_height=”fill_parent”
  25. android:gravity=”center_vertical”
  26. android:text=”@string/detail_process_name”></TextView>
  27. <Button android:id=”@+id/btn_kill_process”
  28. android:textSize=”6pt”
  29. android:layout_alignParentRight=”true”
  30. android:layout_width=”wrap_content”
  31. android:layout_height=”fill_parent”
  32. android:paddingTop=”0dip”
  33. android:paddingBottom=”0dip”
  34. android:paddingRight=”10dip”
  35. android:paddingLeft=”10dip”
  36. android:layout_marginTop=”2dip”
  37. android:textStyle=”bold”
  38. android:text=”@string/kill_process”
  39. android:textColor=”#5555EE”></Button>
  40. </RelativeLayout>
  41. <TextView
  42. android:id=”@+id/detail_process_name”
  43. android:layout_height=”wrap_content”
  44. android:layout_width=”fill_parent”
  45. android:paddingTop=”3dip”
  46. android:paddingBottom=”3dip” />
  47. <TextView
  48. android:text=”@string/detail_process_copyright”
  49. android:textSize=”7pt”
  50. android:layout_alignParentLeft=”true”
  51. android:layout_width=”fill_parent”
  52. android:layout_height=”25dip”
  53. android:gravity=”center_vertical”
  54. android:background=”#555555″
  55. android:paddingTop=”3dip”
  56. android:paddingBottom=”3dip” />
  57. <TextView
  58. android:id=”@+id/detail_process_copyright”
  59. android:layout_height=”wrap_content”
  60. android:layout_width=”fill_parent”
  61. android:paddingTop=”3dip”
  62. android:paddingBottom=”3dip” />
  63. <TextView
  64. android:text=”@string/detail_process_install_dir”
  65. android:textSize=”7pt”
  66. android:layout_alignParentLeft=”true”
  67. android:layout_width=”fill_parent”
  68. android:layout_height=”25dip”
  69. android:gravity=”center_vertical”
  70. android:background=”#555555″
  71. android:paddingTop=”3dip”
  72. android:paddingBottom=”3dip” />
  73. <TextView
  74. android:id=”@+id/detail_process_install_dir”
  75. android:layout_height=”wrap_content”
  76. android:layout_width=”fill_parent”
  77. android:paddingTop=”3dip”
  78. android:paddingBottom=”3dip” />
  79. <TextView
  80. android:text=”@string/detail_process_data_dir”
  81. android:textSize=”7pt”
  82. android:layout_alignParentLeft=”true”
  83. android:layout_width=”fill_parent”
  84. android:layout_height=”25dip”
  85. android:gravity=”center_vertical”
  86. android:background=”#555555″
  87. android:paddingTop=”3dip”
  88. android:paddingBottom=”3dip” />
  89. <TextView
  90. android:id=”@+id/detail_process_data_dir”
  91. android:layout_height=”wrap_content”
  92. android:layout_width=”fill_parent”
  93. android:paddingTop=”3dip”
  94. android:paddingBottom=”3dip” />
  95. <TextView
  96. android:text=”@string/detail_process_package_size”
  97. android:textSize=”7pt”
  98. android:layout_alignParentLeft=”true”
  99. android:layout_width=”fill_parent”
  100. android:layout_height=”25dip”
  101. android:gravity=”center_vertical”
  102. android:background=”#555555″
  103. android:paddingTop=”3dip”
  104. android:paddingBottom=”3dip” />
  105. <TextView
  106. android:id=”@+id/detail_process_package_size”
  107. android:layout_height=”wrap_content”
  108. android:layout_width=”fill_parent”
  109. android:paddingTop=”3dip”
  110. android:paddingBottom=”3dip” />
  111. <TextView
  112. android:text=”@string/detail_process_permission”
  113. android:textSize=”7pt”
  114. android:layout_alignParentLeft=”true”
  115. android:layout_width=”fill_parent”
  116. android:layout_height=”25dip”
  117. android:gravity=”center_vertical”
  118. android:background=”#555555″
  119. android:paddingTop=”3dip”
  120. android:paddingBottom=”3dip” />
  121. <TextView
  122. android:id=”@+id/detail_process_permission”
  123. android:layout_height=”wrap_content”
  124. android:layout_width=”fill_parent”
  125. android:paddingTop=”3dip”
  126. android:paddingBottom=”3dip” />
  127. <TextView
  128. android:text=”@string/detail_process_service”
  129. android:textSize=”7pt”
  130. android:layout_alignParentLeft=”true”
  131. android:layout_width=”fill_parent”
  132. android:layout_height=”25dip”
  133. android:gravity=”center_vertical”
  134. android:background=”#555555″
  135. android:paddingTop=”3dip”
  136. android:paddingBottom=”3dip” />
  137. <TextView
  138. android:id=”@+id/detail_process_service”
  139. android:layout_height=”wrap_content”
  140. android:layout_width=”fill_parent”
  141. android:paddingTop=”3dip”
  142. android:paddingBottom=”3dip” />
  143. <TextView
  144. android:text=”@string/detail_process_activity”
  145. android:textSize=”7pt”
  146. android:layout_alignParentLeft=”true”
  147. android:layout_width=”fill_parent”
  148. android:layout_height=”25dip”
  149. android:gravity=”center_vertical”
  150. android:background=”#555555″
  151. android:paddingTop=”3dip”
  152. android:paddingBottom=”3dip” />
  153. <TextView
  154. android:id=”@+id/detail_process_activity”
  155. android:layout_height=”wrap_content”
  156. android:layout_width=”fill_parent”
  157. android:paddingTop=”3dip”
  158. android:paddingBottom=”3dip” />
  159. </LinearLayout>
  160. </ScrollView>

 

 


二、获取进程的图标、进程名、Application名字、和CPU内存信息  我在程序中使用了一个类BasicProgramUtil来存放进程列表中显示的摘要信息,包括了进程图标、进程名、Application名、CPU和内存信息。  BasicProgramUtil.java

  1. /**
  2. * 应用程序包的简要信息
  3. */
  4. package crazypebble.sysassist.procmgr;
  5. import android.graphics.drawable.Drawable;
  6. public class BasicProgramUtil{
  7. /*
  8. * 定义应用程序的简要信息部分
  9. */
  10. private Drawable icon;                            // 程序图标
  11. private String programName;                        // 程序名称
  12. private String processName;
  13. private String cpuMemString;
  14. public BasicProgramUtil() {
  15. icon = null;
  16. programName = “”;
  17. processName = “”;
  18. cpuMemString = “”;
  19. }
  20. public Drawable getIcon() {
  21. return icon;
  22. }
  23. public void setIcon(Drawable icon) {
  24. this.icon = icon;
  25. }
  26. public String getProgramName() {
  27. return programName;
  28. }
  29. public void setProgramName(String programName) {
  30. this.programName = programName;
  31. }
  32. public String getCpuMemString() {
  33. return cpuMemString;
  34. }
  35. public void setCpuMemString(String cpuMemString) {
  36. this.cpuMemString = cpuMemString;
  37. }

欢迎大佬支持本博客的发展 -- Donate --

本文链接:Android平台下实现一个进程管理器

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:三十岁,谢谢!^^


分享到:          
  1. 我之前也做了个TaskManager用“ActivityManager.killBackgroundProcesses(PackageName)”的时候反应很慢。而且出现kill不掉现象,后来用的restore蛮好用的 呵呵

  1. 没有通告