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

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

|字号 订阅

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;

    }

}

结束。 从自己博客搬过来,样式有点难看。

时间: 2024-08-02 00:52:12

获取进程、服务、任务列表的相关文章

python-Python获取指定服务的cpu占用率?求大神指点,我代码运行不出来

问题描述 Python获取指定服务的cpu占用率?求大神指点,我代码运行不出来 以下是我的两个文件,希望大神或者喜欢尝试的兄弟看看. test_no1.py #!/usr/bin/env python #-*- coding:utf-8 -*- import ctypes; import psutil import test_no2metaclass = type; class PROCESSENTRY32(ctypes.Structure):fields = [ ("dwSize",

c++获取进程信息列表和进程所调用的dll列表_C 语言

复制代码 代码如下: // -----------------------// FileName: // ProcessInfo.h// remarks:// 基于应用层实现,有的进程,如杀软进程等获取不到调用的dll列表.// ----------------------- #pragma once#include <vector> struct ProInfo{    // 保存进程PID    unsigned int uPID;    // 保存进程名    CString strPr

如何在NT下获取进程的路径(增补)

一.程序说明 最近整理文档,发现以前写的<如何在NT下获取进程的路径>一文中还有个问题没有解决:原文中的程序无法获取系统进程的路径,如:csrss.exe.记得VCKBASE上有位网友说过一个方法:"给枚举的进程增加SE_DEBUG_NAME权限即可",于是在网上找了些资料,解决了原文中的问题.这里要特别感谢那位名叫rovershen的网友! 我自定义了一个函数,用来赋予进程指定的权限(本例为SE_DEBUG_NAME): BOOL EnablePrivilege(HAND

如何在NT下获取进程的路径

一:获取NT下进程路径的方法 在Win9X系统中,利用ToolHelp API中的相关函数可以很方便得得到进程的名称及其路径.但这种方法在NT系统中就不能奏效了,szExeFile仅仅得到的是进程的名称,并没有包含进程的路径. 如何在NT下获取进程的路径呢?(由于WIN9X系统不在我们讨论的范围之内,所以我们选用PSAPI中的相关函数进行说明,这仅仅适用于NT系统.)其实也很简单--用OpenProcess()函数将进程打开后,再利用EnumProcessModules()函数枚举该进程的模块,

Shell脚本中获取进程ID的方法

 这篇文章主要介绍了Shell脚本中获取进程ID的方法,我想要知道运行中脚本子shell的进程id,我该如何在shell脚本中得到PID,阅读本文即可找到你想要答案,需要的朋友可以参考下     提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中

Android 获取进程内存使用情况方法

ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); activityManager.getMemoryInfo(memoryInfo); Log.i(TAG, " memoryInfo.availMem " + memoryInfo.

asp使用wmi获取本地服务信息不成功

问题描述 asp使用wmi获取本地服务信息不成功 strComputer = "." Set objSWbemServices = GetObject("winmgmts:\" & strComputer & "rootCIMV2") Set objSWbemObjectSet = objSWbemServices.ExecQuery("SELECT * FROM Win32_Service",,48) For

android客户端如何获取web服务端的xml文件

问题描述 我想要实现android客户端通过http连接的方式获取web服务端的xml文件,要怎么实现? 解决方案 程序入口 public static void getXMLForNet() { String httpPath = "填写您要获取xml数据的http地址,如果含有汉子则必须进行编码";String xml = getContent(httpParh, "UTF-8");FileOutputStream out = new FileOutputStr

求问各位大神,同一个WCF服务类在一台电脑上的多个端口开启,如何能在服务类内部获取当前服务是在哪个端口上

问题描述 求问各位大神,同一个WCF服务类在一台电脑上的多个端口开启,如何能在服务类内部获取当前服务是在哪个端口上 解决方案 解决方案二:System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.Port解决方案三:引用1楼fate23409的回复: System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.Port 貌似是正确的,共