• 获取进程、服务、任务列表


    获取进程、服务、任务列表  

    |字号 订阅

    android 获取进程、服务、任务列表

    获取进程列表,需使用ActivityManager中的方法获取进程名;再根据进程名,获取应用程序的ApplicationInfo对象;用ApplicationInfo中的方法为进程加载图标和程序名称。获取服务、任务列表方法同上。

     

    1 实例化ActivityManager

    1
    2
    private ActivityManager mActivityManager;
    mActivityManager=(ActivityManager)getSystemService(ACTIVITY_SERVICE);

    2 获取各列表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //获取任务列表
        public void getTasks()
        {
           aryListTaskID=new ArrayList<String>();
           aryListTaskName=new ArrayList<String>();
           //以getRunningTasks()取得进程TaskInfo
           List<ActivityManager.RunningTaskInfo> mRunningTasks=
               mActivityManager.getRunningTasks(intGetTaskCounter);
           for(ActivityManager.RunningTaskInfo amTask:mRunningTasks)
           {
               aryListTaskName.add(amTask.baseActivity.getClassName());
               aryListTaskID.add(""+amTask.id);
               intTaskNum++;
           }
           tab3_tv1.setText("任务数量:"+intTaskNum);
           tab3_tv2.setText("可用内存:"+fileSize(getAvailableRAM()));
        }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    //获取服务列表
    public void getService()
    {
       linkListServiceIcon=new LinkedList<Drawable>();
       aryListServiceInfo=new ArrayList<String>();
       aryListServiceName=new ArrayList<String>();
       List<ActivityManager.RunningServiceInfo> serivces =
           mActivityManager.getRunningServices(intGetServiceCounter);
       for (RunningServiceInfo service:serivces)
       {
           programUtil.setProcessName(service.process);
            // 根据进程名,获取应用程序的ApplicationInfo对象
            ApplicationInfo tempAppInfo = packageUtil.getApplicationInfo(service.process);
             
            // 为进程加载图标和程序名称
            if (tempAppInfo != null)
            {
            linkListServiceIcon.add(tempAppInfo.loadIcon(packageManager));
            aryListServiceName.add(tempAppInfo.loadLabel(packageManager).toString());
            }
            else
            {
            linkListServiceIcon.add(getApplicationContext().getResources().getDrawable(R.drawable.ic_launcher));
            aryListServiceName.add(service.process);
            }
            
           //MemInfo是否可得,不行则用包名代替
            if(!(mProcessMemoryUtil.getMemInfoByPid(service.pid)==""))
            {
            aryListServiceInfo.add(mProcessMemoryUtil.getMemInfoByPid(service.pid));
            }
            else
            {
            aryListServiceInfo.add(service.process);
            }
            
           intServiceNum++;
       }
        
       tab2_tv1.setText("服务数量:"+intServiceNum);
       tab2_tv2.setText("可用内存:"+fileSize(getAvailableRAM()));
    } 
     
      //获取进程列表
        public void getProcess()
        {
           linkListProcessIcon=new LinkedList<Drawable>();     
           aryListProcessInfo=new ArrayList<String>();
           aryListProcessName=new ArrayList<String>();
             
           List<RunningAppProcessInfo> apps =
               mActivityManager.getRunningAppProcesses();
           for(RunningAppProcessInfo app:apps)
           {
               //包名
    //         aryListProcessName.add(app.processName);
               programUtil.setProcessName(app.processName);
                // 根据进程名,获取应用程序的ApplicationInfo对象
                ApplicationInfo tempAppInfo = packageUtil.getApplicationInfo(app.processName);
                // 为进程加载图标和程序名称
                if (tempAppInfo != null)
                {
                linkListProcessIcon.add(tempAppInfo.loadIcon(packageManager));
                aryListProcessName.add(tempAppInfo.loadLabel(packageManager).toString());
                }
                else
                {
                linkListProcessIcon.add(getApplicationContext().getResources().getDrawable(R.drawable.ic_launcher));
                aryListProcessName.add(app.processName);
                }
                //MemInfo是否可得,不行则用包名代替
                if(!(mProcessMemoryUtil.getMemInfoByPid(app.pid)==""))
                {
                aryListProcessInfo.add(mProcessMemoryUtil.getMemInfoByPid(app.pid));
                }
                else
                {
                aryListProcessInfo.add(app.processName);
                }
               intProcessNum++;
           }
           tab1_tv1.setText("程序数量:"+intProcessNum);
           tab1_tv2.setText("可用内存:"+fileSize(getAvailableRAM()));
        }

    3 PackageUtil.java : 通过一个程序名返回该程序的一个ApplicationInfo对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package com.me.myexplorer;
       
    import java.util.List;
       
    import android.content.Context;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageManager;
       
       
    public class PackageUtil
    {
        // ApplicationInfo 类,保存了普通应用程序的信息,主要是指Manifest.xml中application标签中的信息
        private List<ApplicationInfo> allAppList;
         
        public PackageUtil(Context context) {
            // 通过包管理器,检索所有的应用程序(包括卸载)与数据目录
            PackageManager pm = context.getApplicationContext().getPackageManager();
            allAppList = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
            pm.getInstalledPackages(0);
        }
         
         
        public ApplicationInfo getApplicationInfo(String appName) {
            if (appName == null) {
                return null;
            }
            for (ApplicationInfo appinfo : allAppList) {
                if (appName.equals(appinfo.processName)) {
                    return appinfo;
                }
            }
            return null;
        }
    }

    结束。 从自己博客搬过来,样式有点难看。
  • 相关阅读:
    Arrays.asList的使用
    php之sql语句 创建数据库、表、插入字段,自动判断是否成功
    初识 canvas 绘图
    自定义音频audio播放器
    我的晨练
    js获取屏幕或可视范围
    js 查看脚本运行时间的办法
    a:hover伪类在ios移动端浏览器内触发无法取消
    js模拟用户触摸事件
    持续健身带来的变化
  • 原文地址:https://www.cnblogs.com/new0801/p/6175942.html
Copyright © 2020-2023  润新知