获取正在系统运行的进程

来源:互联网 发布:阿里云使用教程 编辑:程序博客网 时间:2024/05/21 08:40

package zxf.mobilesafe.engin;

import java.util.ArrayList;
import java.util.List;

import zxf.mobilesafe.bean.TaskInfo;
import android.app.ActivityManager;

import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Debug.MemoryInfo;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class TaskInfoProvider  {
 private ActivityManager am;
 private PackageManager pm;
 
 public TaskInfoProvider(ActivityManager am,PackageManager pm) {
  super();
  this.am = am;
  this.pm = pm;
 }

 public List<TaskInfo> getAllTaskInfos(){
  List <TaskInfo> list =  new ArrayList<TaskInfo> ();
  List<RunningAppProcessInfo>  process = am.getRunningAppProcesses();
  for(RunningAppProcessInfo rp : process){
   TaskInfo ti = new TaskInfo();
   ti.setPackageName(rp.processName);
   ti.setTaskName(rp.processName);
   ti.setPid(rp.pid);
   ApplicationInfo  appInfo=null;
   try {
    //第二个参数为0 表示不需要获取额外的信息
      appInfo = pm.getApplicationInfo(ti.getPackageName(), 0);
      //判断是否为系统程序
      ti.setIsuserapp(this.filterApp(appInfo));
      ti.setTaskIcon(appInfo.loadIcon(pm));
      ti.setTaskName(appInfo.loadLabel(pm).toString());
      int[] pids ={rp.pid};
      MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(pids);
      //获取某进程的内存占用数目
      ti.setMemory(getMemoryStr(memoryInfos[0].getTotalPrivateDirty()));
   } catch (NameNotFoundException e) {
    e.printStackTrace();
   }
   list.add(ti);
  }
  return list;
 }
 private String getMemoryStr(int kbMemory){
  if(kbMemory<1024){
   return kbMemory+"KB";
  }else if(kbMemory>1024&&kbMemory<1024*1024){
   return (kbMemory/1000f)+"MB";
  }
  return "";
 }
 /**
   *
   * @param info
   * @return 是否是三方的app
   */
  private boolean filterApp(ApplicationInfo info) {
   // 系统程序 被我们用户升级了 , 三方的app
   // 带了qq ,
   if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
    return true;
   } else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
    return true; // 用户自己下载的app
   }
   return false;
  }

 


}