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

简介: 获取进程、服务、任务列表   |字号 订阅 android 获取进程、服务、任务列表 获取进程列表,需使用ActivityManager中的方法获取进程名;再根据进程名,获取应用程序的ApplicationInfo对象;用ApplicationInfo中的方法为进程加载图标和程序名称。

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

|字号 订阅

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 ;
     }
}

结束。 从自己博客搬过来,样式有点难看。
相关文章
|
1月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
39 1
|
2月前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
144 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
3月前
|
Linux Perl
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
|
5月前
|
开发框架 安全 .NET
【权限提升】Win本地用户&进程注入&令牌窃取&AT&SC&PS服务命令
【权限提升】Win本地用户&进程注入&令牌窃取&AT&SC&PS服务命令
|
5月前
|
Java 程序员
Java多线程编程是指在一个进程中创建并运行多个线程,每个线程执行不同的任务,并行地工作,以达到提高效率的目的
【6月更文挑战第18天】Java多线程提升效率,通过synchronized关键字、Lock接口和原子变量实现同步互斥。synchronized控制共享资源访问,基于对象内置锁。Lock接口提供更灵活的锁管理,需手动解锁。原子变量类(如AtomicInteger)支持无锁的原子操作,减少性能影响。
46 3
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之运行run-application --target kubernetes-application执行,通过进程的返回码来决定作业是否成功,任务返回码都是0,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
安全 Linux 应用服务中间件
操作系统引导过程 与 服务进程的控制
操作系统引导过程 与 服务进程的控制
|
6月前
|
Java 测试技术 Python
Python的多线程允许在同一进程中并发执行任务
【5月更文挑战第17天】Python的多线程允许在同一进程中并发执行任务。示例1展示了创建5个线程打印&quot;Hello World&quot;,每个线程调用同一函数并使用`join()`等待所有线程完成。示例2使用`ThreadPoolExecutor`下载网页,创建线程池处理多个URL,打印出每个网页的大小。Python多线程还可用于线程间通信和同步,如使用Queue和Lock。
72 1
|
6月前
|
Linux API
【操作系统】实验七 显示进程列表
【操作系统】实验七 显示进程列表
112 2
|
6月前
|
Linux API 调度
进程,任务
进程,任务
33 1