《枚举Android系统的进程、任务和服务的息》 中,实现了一个简单的监控Android 平台下的系统进程,任务,服务信息的小工具。在本文中,我将对这个小工具中的系统进程信息部分,进一步的完善。从用户的角度出发,将系统的任务信息Task和服务信息Service全部显示出来的意义不是很大,因此本文将不会对任务和服务两部分内容对任何更新。
介绍之前,先给大家看看程序执行后的界面,首先了解大致的功能,然后理解起来,会更加得心应手。
1、 获取系统进程列表,并加载进程名、CPU占用情况、内存使用情况
2、 点击某一个进程之后,让用户选择操作:“查看详情”和“结束进程”
3、 显示进程的详细信息:包括了进程的安装包路径、版权信息、用户权限、拥有的服务、和拥有的活动,等
4、 程序退出的方式
5、 任务列表 和 服务列表
在对界面和主要功能有一个大致了解之后,我们就开始编写我们的代码了。
一、界面布局
本文对整个功能界面采用了选项卡式的布局,布局文件如下:
main.xml
- <?xml version=”1.0″ encoding=”utf-8″?>
- <TabHost xmlns:android=”http://schemas.android.com/apk/res/android”
- android:id=”@android:id/tabhost”
- android:layout_width=”fill_parent”
- android:layout_height=”fill_parent”>
- <LinearLayout android:orientation=”vertical”
- android:layout_width=”fill_parent”
- android:layout_height=”fill_parent”
- android:padding=”2dp”>
- <TabWidget android:id=”@android:id/tabs”
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content” />
- <FrameLayout android:id=”@android:id/tabcontent”
- android:layout_width=”fill_parent”
- android:layout_height=”fill_parent”
- android:padding=”5dp” />
- </LinearLayout>
- </TabHost>
每一个选项卡的内容都是一个列表ListView,分别用于显示系统的进程、任务和服务列表,布局文件我们就此略过了。 在进程的详情中,我们使 用不同背景色的TextView作为一个数据部分的标题,这样给人视觉上一个比较清晰的层次感,代码如下:整个详情信息是一个ScrollView,在第 一行中嵌入了一个Button,其他行的数据显示都比较简单,大家看看我的控件ID就差不多知道这个控件的意思了。proc_detail.xml
- <?xml version=”1.0″ encoding=”utf-8″?>
- <ScrollView
- xmlns:android=”http://schemas.android.com/apk/res/android”
- android:layout_height=”wrap_content”
- android:layout_width=”match_parent”
- android:scrollbars=”none”>
- <LinearLayout
- android:id=”@+id/linearlayout1″
- android:layout_width=”fill_parent”
- android:layout_height=”fill_parent”
- android:orientation=”vertical”
- android:paddingLeft=”3dip”
- android:paddingRight=”3dip”
- android:paddingTop=”1dip”
- android:paddingBottom=”1dip”>
- <RelativeLayout android:layout_width=”match_parent”
- android:layout_height=”27dip”
- android:background=”#555555″
- android:id=”@+id/relativeLayout1″>
- <TextView android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:id=”@+id/textView1″
- android:layout_width=”wrap_content”
- android:layout_height=”fill_parent”
- android:gravity=”center_vertical”
- android:text=”@string/detail_process_name”></TextView>
- <Button android:id=”@+id/btn_kill_process”
- android:textSize=”6pt”
- android:layout_alignParentRight=”true”
- android:layout_width=”wrap_content”
- android:layout_height=”fill_parent”
- android:paddingTop=”0dip”
- android:paddingBottom=”0dip”
- android:paddingRight=”10dip”
- android:paddingLeft=”10dip”
- android:layout_marginTop=”2dip”
- android:textStyle=”bold”
- android:text=”@string/kill_process”
- android:textColor=”#5555EE”></Button>
- </RelativeLayout>
- <TextView
- android:id=”@+id/detail_process_name”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:text=”@string/detail_process_copyright”
- android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:layout_width=”fill_parent”
- android:layout_height=”25dip”
- android:gravity=”center_vertical”
- android:background=”#555555″
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:id=”@+id/detail_process_copyright”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:text=”@string/detail_process_install_dir”
- android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:layout_width=”fill_parent”
- android:layout_height=”25dip”
- android:gravity=”center_vertical”
- android:background=”#555555″
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:id=”@+id/detail_process_install_dir”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:text=”@string/detail_process_data_dir”
- android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:layout_width=”fill_parent”
- android:layout_height=”25dip”
- android:gravity=”center_vertical”
- android:background=”#555555″
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:id=”@+id/detail_process_data_dir”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:text=”@string/detail_process_package_size”
- android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:layout_width=”fill_parent”
- android:layout_height=”25dip”
- android:gravity=”center_vertical”
- android:background=”#555555″
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:id=”@+id/detail_process_package_size”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:text=”@string/detail_process_permission”
- android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:layout_width=”fill_parent”
- android:layout_height=”25dip”
- android:gravity=”center_vertical”
- android:background=”#555555″
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:id=”@+id/detail_process_permission”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:text=”@string/detail_process_service”
- android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:layout_width=”fill_parent”
- android:layout_height=”25dip”
- android:gravity=”center_vertical”
- android:background=”#555555″
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:id=”@+id/detail_process_service”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:text=”@string/detail_process_activity”
- android:textSize=”7pt”
- android:layout_alignParentLeft=”true”
- android:layout_width=”fill_parent”
- android:layout_height=”25dip”
- android:gravity=”center_vertical”
- android:background=”#555555″
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- <TextView
- android:id=”@+id/detail_process_activity”
- android:layout_height=”wrap_content”
- android:layout_width=”fill_parent”
- android:paddingTop=”3dip”
- android:paddingBottom=”3dip” />
- </LinearLayout>
- </ScrollView>
二、获取进程的图标、进程名、Application名字、和CPU内存信息 我在程序中使用了一个类BasicProgramUtil来存放进 程列表中显示的摘要信息,包括了进程图标、进程名、Application名、CPU和内存信息。 BasicProgramUtil.java
- /**
- * 应用程序包的简要信息
- */
- package crazypebble.sysassist.procmgr;
- import android.graphics.drawable.Drawable;
- public class BasicProgramUtil{
- /*
- * 定义应用程序的简要信息部分
- */
- private Drawable icon; // 程序图标
- private String programName; // 程序名称
- private String processName;
- private String cpuMemString;
- public BasicProgramUtil() {
- icon = null;
- programName = “”;
- processName = “”;
- cpuMemString = “”;
- }
- public Drawable getIcon() {
- return icon;
- }
- public void setIcon(Drawable icon) {
- this.icon = icon;
- }
- public String getProgramName() {
- return programName;
- }
- public void setProgramName(String programName) {
- this.programName = programName;
- }
- public String getCpuMemString() {
- return cpuMemString;
- }
- public void setCpuMemString(String cpuMemString) {
- this.cpuMemString = cpuMemString;
- }