Android中使用ActivityManager可以获得进程信息,并对进程进行管理,如结束进程等。本文使用ActivityManager获得进程列表,并结束选中的进程。
首先,看看布局文件。
然后是Java文件。
package com.hzhi.sysinfor;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.ActivityManager;import android.app.AlertDialog;import android.app.ListActivity;import android.app.ProgressDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Bundle;import android.os.Debug;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class process extends ListActivity{ Button btn_stop; PackageManager pkg_man; list_pro list_ada; ActivityManager am; // 获得所有的进程列表 public void get_pro(){ list_ada = new list_pro(this); // 包管理器 am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); // 获取手机内所有应用 Listpi = am.getRunningAppProcesses(); for (int i=0; i list_data; public list_pro(Context context){ ctx = context; list_data = new ArrayList (); } @Override public int getCount() { // TODO Auto-generated method stub return list_data.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return list_data.get(arg0); } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return list_data.indexOf(arg0); } @Override public View getView(int position, View convertView, ViewGroup parent) { item_pro my_item; Integer i = 0; if (convertView == null) { my_item = new item_pro(ctx, (String)list_data.get(position).txt_no.getText(), (String)list_data.get(position).txt_name.getText(), (String)list_data.get(position).txt_size.getText(), list_data.get(position).is_chk); } else { my_item = (item_pro)convertView; my_item.txt_no.setText(list_data.get(position).txt_no.getText()); my_item.txt_name.setText(list_data.get(position).txt_name.getText()); my_item.txt_size.setText(list_data.get(position).txt_size.getText()); } CheckBox chk_item = (CheckBox) my_item.chk_pro; chk_item.setOnClickListener(this); chk_item.setChecked(list_data.get(position).is_chk); chk_item.setTag(position); return my_item; } public void addItem(String txt_no, String txt_name, String str_size, Boolean bol_chk) { list_data.add(new item_pro(ctx,txt_no,txt_name,str_size,bol_chk)); } @Override public void onClick(View v) { // TODO Auto-generated method stub CheckBox c = (CheckBox) v; int pos = Integer.parseInt(v.getTag().toString()); list_data.get(pos).is_chk = c.isChecked(); } }// pro列表的一行class item_pro extends LinearLayout{ public CheckBox chk_pro; // 进程号 public TextView txt_no; // 进程名 public TextView txt_name; // 占用内存大小 public TextView txt_size; // 是否选中 public boolean is_chk; public item_pro(Context ctx, String str_no, String str_name, String str_size, Boolean bol_chk) { super(ctx); this.setOrientation(HORIZONTAL); int hei = 80; chk_pro = new CheckBox(ctx); addView(chk_pro, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); txt_no = new TextView(ctx); txt_no.setText(str_no); addView(txt_no, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); txt_name = new TextView(ctx); txt_name.setText(str_name); addView(txt_name, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.4),hei)); txt_size = new TextView(ctx); txt_size.setText(str_size); addView(txt_size, new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); is_chk = bol_chk; }}
Java文件实现了三个类。process类是整个Activity的类,list_pro是适配器类,item_pro是列表里面的一行。
在process类的get_pro()方法里面,语句am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)获得了一个ActivityManager,List<ActivityManager.RunningAppProcessInfo> pi = am.getRunningAppProcesses()获得了系统的所有进程,并存储在列表pi里面。语句ActivityManager.RunningAppProcessInfo pii = (ActivityManager.RunningAppProcessInfo) pi.get(i)获得了每一个进程信息,pii.processName是该进程的进程名(通常是该进程对应的包名),mi[0].dalvikPrivateDirty是该进程占用的内存大小(通常以KB为单位)。在unload (String n)方法里面,am.killBackgroundProcesses(n)结束了进程名为n的进程,不过要在AndroidManifest.xml中加入android.permission.KILL_BACKGROUND_PROCESSES权限,否则会出现权限错误。运行效果如下。
需要注意的是,系统进程是不能结束的。