你的位置:首页 > 操作系统

[操作系统]android 查看手机运行的进程列表


<LinearLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical" >  <!-- 定义获取可用内存的按钮 -->  <Button    android:id="@+id/btn_main_ablememory"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="可用 的内存"/>  <!-- 定义查看正在运行的进程的按钮 -->  <Button    android:id="@+id/btn_main_lookruningmemory"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="查看正在运行的进程"/>  <!-- 定义显示当前进程数的标签控件 -->  <TextView    android:id="@+id/tv_main_currentprocessnum"    android:layout_width="fill_parent"    android:layout_height="wrap_content" />  <!-- 定义进程列表控件 -->  <ListView    android:id="@+id/lv_main_list"    android:layout_width="fill_parent"    android:layout_height="wrap_content"/>  <!-- 定义获取内容显示的标签控件 -->  <TextView    android:id="@+id/tv_main_text"    android:layout_width="wrap_content"    android:layout_height="wrap_content" /></LinearLayout>

browse_process_item.

<??><LinearLayout ="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent" android:layout_height="80dip" android:orientation="vertical">  <LinearLayout android:layout_width="fill_parent"     android:layout_height="wrap_content" android:layout_marginLeft="10dip"    android:orientation="horizontal">    <TextView android:layout_width="100dip"      android:layout_height="wrap_content" android:text="进程ID : "></TextView>    <TextView android:id="@+id/tvProcessPID"      android:layout_width="wrap_content" android:layout_height="wrap_content"      android:layout_marginLeft="3dip" android:textColor="#FFD700"></TextView>  </LinearLayout>  <LinearLayout android:layout_width="fill_parent"    android:layout_height="wrap_content" android:layout_marginLeft="10dip"    android:orientation="horizontal">    <TextView android:layout_width="100dip"      android:layout_height="wrap_content" android:text="进程所在UID:"></TextView>    <TextView android:id="@+id/tvProcessUID"      android:layout_width="wrap_content" android:layout_height="wrap_content"      android:textColor="#FFD700"></TextView>  </LinearLayout>  <LinearLayout android:layout_width="fill_parent"    android:layout_height="wrap_content" android:layout_marginLeft="10dip"    android:orientation="horizontal">    <TextView android:layout_width="100dip"      android:layout_height="wrap_content" android:text="进程占用内存:"></TextView>    <TextView android:id="@+id/tvProcessMemSize"      android:layout_width="wrap_content" android:layout_height="wrap_content"      android:textColor="#FFD700"></TextView>  </LinearLayout>  <LinearLayout android:layout_width="fill_parent"    android:layout_height="wrap_content" android:layout_marginLeft="10dip"    android:orientation="horizontal">    <TextView android:layout_width="100dip"      android:layout_height="wrap_content" android:text="进程名:"></TextView>    <TextView android:id="@+id/tvProcessName"      android:layout_width="wrap_content" android:layout_height="wrap_content"      android:textColor="#FFD700"></TextView>  </LinearLayout></LinearLayout>

 

package com.example.yanlei.yl2;import android.app.ActivityManager;import android.app.ActivityManager.MemoryInfo;import android.content.Context;import android.os.Bundle;import android.os.Debug;import android.support.v7.app.AppCompatActivity;import android.text.format.Formatter;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {  // 得到可用内存的按钮对象  private Button btnEnableMember;  // 查看运行的程序  private Button btnLookRuningMemory;  // 得到activity的管理对象  private ActivityManager mActivityManager;  // 显示可用内存的标签  private TextView tvText;  // 显示进程的列表对象  private ListView listviewProcess;  // 进程数组对象  private ArrayList<ProcessInfo> processInfoList;  // 显示进程总数的对象  private TextView tvCurrentProcessNum;  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    // 得到布局中的控件    findView();    // 给控件设置监听器    setListener();    // 得到ActivityManager服务    mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  }  private void setListener() {    // TODO Auto-generated method stub    btnEnableMember.setOnClickListener(listener);    btnLookRuningMemory.setOnClickListener(listener);  }  private void findView() {    // 得到布局中的控件对象    btnEnableMember = (Button) findViewById(R.id.btn_main_ablememory);    btnLookRuningMemory = (Button) findViewById(R.id.btn_main_lookruningmemory);    tvText = (TextView) findViewById(R.id.tv_main_text);    listviewProcess = (ListView) findViewById(R.id.lv_main_list);    tvCurrentProcessNum = (TextView) findViewById(R.id.tv_main_currentprocessnum);  }  OnClickListener listener = new OnClickListener() {    @Override    public void onClick(View v) {      // TODO Auto-generated method stub      switch (v.getId()) {        case R.id.btn_main_ablememory:          // 得到系统可用的内存          String availMemStr = getSystemAvaialbeMemorySize();          // 设置textview的内容          tvText.setText(availMemStr);          // 设置textview可见          tvText.setVisibility(View.VISIBLE);          // 设置listview不可见          listviewProcess.setVisibility(View.GONE);          break;        case R.id.btn_main_lookruningmemory:          // 设置textview不可见          tvText.setVisibility(View.GONE);          // 设置listview可见          listviewProcess.setVisibility(View.VISIBLE);          // 获得系统进程信息          getRunningAppProcessInfo();          // 向适配器中放置数据源          setAdapter();          break;        default:          break;      }    }  };  protected String getSystemAvaialbeMemorySize() {    // TODO Auto-generated method stub    // 获得MemoryInfo对象    MemoryInfo memoryInfo = new MemoryInfo();    // 获得系统可用内存,保存在MemoryInfo对象上    mActivityManager.getMemoryInfo(memoryInfo);    long memSize = memoryInfo.availMem;    // 字符类型转换    String availMemStr = formateFileSize(memSize);    return availMemStr;  }  // 字符类型转换  private String formateFileSize(long size) {    return Formatter.formatFileSize(MainActivity.this, size);  }  // 向适配器中放置数据源  protected void setAdapter() {    // TODO Auto-generated method stub    ProcessInfoAdapter mprocessInfoAdapter = new ProcessInfoAdapter(this,        processInfoList);    listviewProcess.setAdapter(mprocessInfoAdapter);  }  // 获得系统进程信息  private void getRunningAppProcessInfo() {    // ProcessInfo Model类 用来保存所有进程信息    processInfoList = new ArrayList<ProcessInfo>();    // 通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程    List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager        .getRunningAppProcesses();    for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessList) {      // 进程ID号      int pid = appProcessInfo.pid;      // 用户ID 类似于Linux的权限不同,ID也就不同 比如 root等      int uid = appProcessInfo.uid;      // 进程名,默认是包名或者由属性android:process=""指定      String processName = appProcessInfo.processName;      // 获得该进程占用的内存      int[] myMempid = new int[] { pid };      // 此MemoryInfo位于android.os.Debug.MemoryInfo包中,用来统计进程的内存信息      Debug.MemoryInfo[] memoryInfo = mActivityManager          .getProcessMemoryInfo(myMempid);      // 获取进程占内存用信息 kb单位      int memSize = memoryInfo[0].dalvikPrivateDirty;      // 构造一个ProcessInfo对象      ProcessInfo processInfo = new ProcessInfo();      // 设置processinfo信息      processInfo.setPid(pid);      processInfo.setUid(uid);      processInfo.setMemSize(memSize);      processInfo.setProcessName(processName);      // 添加到processInfoList中      processInfoList.add(processInfo);    }    // 得到进程个数    tvCurrentProcessNum.setText("当前系统进程共有:" + processInfoList.size());  }}

ProcessInfo.java
package com.example.yanlei.yl2;//定义ProcessInfo类,代表一个进程的信息public class ProcessInfo {  private int pid; // 进程id Android规定android.system.uid=1000  private int uid; // 进程所在的用户id ,即该进程是有谁启动的 root/普通用户等  private int memSize; // 进程占用的内存大小,单位为kb  private String processName; // 进程名  public ProcessInfo(){}  public int getPid() {    return pid;  }  public void setPid(int pid) {    this.pid = pid;  }  public int getUid() {    return uid;  }  public void setUid(int uid) {    this.uid = uid;  }  public int getMemSize() {    return memSize;  }  public void setMemSize(int memSize) {    this.memSize = memSize;  }  public String getProcessName() {    return processName;  }  public void setProcessName(String processName) {    this.processName = processName;  }}

ProcessInfoAdapter.java
package com.example.yanlei.yl2;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;//自定义适配器类,提供给listView的自定义viewpublic class ProcessInfoAdapter extends BaseAdapter {  // 需要显示的对象列表  private List<ProcessInfo> mlistProcessInfo = null;  LayoutInflater infater = null;  public ProcessInfoAdapter(Context context, List<ProcessInfo> apps) {    // 初始化infater对象    infater = (LayoutInflater) context        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);    // 初始化需要显示的mlistProcessInfo对象    mlistProcessInfo = apps;  }  @Override  public int getCount() {    // TODO Auto-generated method stub    System.out.println("size" + mlistProcessInfo.size());    return mlistProcessInfo.size();  }  @Override  public Object getItem(int position) {    // TODO Auto-generated method stub    return mlistProcessInfo.get(position);  }  @Override  public long getItemId(int position) {    // TODO Auto-generated method stub    return 0;  }  @Override  public View getView(int position, View convertview, ViewGroup arg2) {    View view = null;    ViewHolder holder = null;    if (convertview == null || convertview.getTag() == null) {      // 通过      view = infater.inflate(R.layout.browse_process_item, null);      holder = new ViewHolder(view);      // 把查找的view缓存起来      view.setTag(holder);    } else {      view = convertview;      // 取出缓存的VIEW      holder = (ViewHolder) convertview.getTag();    }    // 得到ProcessInfo信息,并在item的每个位置显示相关信息    ProcessInfo processInfo = (ProcessInfo) getItem(position);    holder.tvPID.setText(processInfo.getPid() + "");    holder.tvUID.setText(processInfo.getUid() + "");    holder.tvProcessMemSize.setText(processInfo.getMemSize() + "KB");    holder.tvProcessName.setText(processInfo.getProcessName());    // 返回需要显示的view    return view;  }  // 占位符  class ViewHolder {    TextView tvPID; // 进程ID    TextView tvUID; // 用户ID    TextView tvProcessMemSize; // 进程占用内存大小    TextView tvProcessName; // 进程名    public ViewHolder(View view) {      this.tvPID = (TextView) view.findViewById(R.id.tvProcessPID);      this.tvUID = (TextView) view.findViewById(R.id.tvProcessUID);      this.tvProcessMemSize = (TextView) view          .findViewById(R.id.tvProcessMemSize);      this.tvProcessName = (TextView) view          .findViewById(R.id.tvProcessName);    }  }}