博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 获取进程、服务、任务列表
阅读量:6932 次
发布时间:2019-06-27

本文共 4353 字,大约阅读时间需要 14 分钟。

hot3.png

获取进程列表,需使用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()));
}
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
    
//获取进程列表
    
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
;
    
}
}
 

转载于:https://my.oschina.net/zchuanzhao/blog/512656

你可能感兴趣的文章
《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:发布具有同步能力的FeatureService服务...
查看>>
Oracle快速克隆安装
查看>>
Spring Boot中使用JdbcTemplate访问数据库
查看>>
struts2的核心和工作原理
查看>>
一种快速统计SQL Server每个表行数的方法
查看>>
(zhuan) How to Train Neural Networks With Backpropagation
查看>>
MHA快速搭建
查看>>
看过的编程类好书(资料)
查看>>
BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
查看>>
抽水算法
查看>>
.net 中struct(结构)和class(类)的区别
查看>>
Unity3D的坑系列:动态加载dll
查看>>
从JSON数据中取出相关数据
查看>>
Quartz安装包中的15个example
查看>>
12C -- DDL日志
查看>>
消息总线VS消息队列
查看>>
Eclipse SDK构建J2EE开发环境
查看>>
入门基础
查看>>
object dection资源
查看>>
Swift标识符和keyword
查看>>