您的位置:首页 > 其它

编写一个任务管理器/进程获取/PID获取

2012-06-22 11:53 260 查看
Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一) .

博客分类:

Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一) .

转载请注明出处:http://blog.csdn.net/qinjuning

本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括

进程(Process)等、应用程序/包、服务(Service)、任务(Task)信息。

计划如下:

第一部分:获取系统可用内存以及所有的正在运行的进程信息 ;

第二部分:获取每个进程里运行的应用程序信息和所有正在运行的应用程序

第三部分:获取正在运行的服务和任务信息。

每部分都准备了相应的Demo,助您更深的理解.

知识准备:Android 应用程序模块: 应用、任务、进程的知识介绍:

1 一个android 包(简称.apk) :里面包含应用程序的代码以及资源。这是一个应用发布,用户能下载并安装他们

设备上的文件。

2 一个 任务:通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可以来启动任务,这是一个

上层的应用,可以将你的任务切换到前台来。

3 一个 进程:是一个底层的代码运行级别的核心进程。通常.apk包里所有代码运行在一个进程里,一个进程对于

一个.apk包;然而,进程标签常用来改变代码运行的位置,可以是全部的.apk包或者是独立的活动,接收器,服务,
或者

提供器组件。

进程
在Android中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用途很简单:

1、提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。

2、可将多个.apk包运行在同一个进程里减少系统开销。

3、帮助系统管理资源,将重要的代码放在一个单独的进程里,这样就可以单独销毁应用程序的其他部分。

于是,为了完成某一任务或者减少系统资源的开销,一个进程里可以运行一个或多个应用程序

更多知识点获取,请访问:《Android 应用程序模块: 应用, 任务, 进程, 和线程

ActivityManager 类:
获取方法 ActivityManager mActivityManager (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

常用的静态内部类如下(下面具体介绍):

ActivityManager.MemoryInfo: 系统可用内存信息

ActivityManager.RecentTaskInfo: 最近的任务信息

ActivityManager.RunningAppProcessInfo: 正在运行的进程信息

ActivityManager.RunningServiceInfo: 正在运行的服务信息

ActivityManager.RunningTaskInfo: 正在运行的任务信息

常用方法:

public void getMemoryInfo(ActivityManager.MemoryInfo outInfo)

说明:获取系统可用内存信息,数据封装在outInfo对象上

public Debug.MemoryInfogetProcessMemoryInfo(int[ ] pids

说明:获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。

参数: pids 进程ID的集合

PS :我们可以通过调用Debug.MemoryInfo 的dalvikPrivateDirty字段获取进程占用的内存大小(单位为KB)

public List<ActivityManager.RunningAppProcessInfo>getRunningAppProcess()

说明: 获取系统里正在运行的进程

public List<ActivityManager.RunningServiceInfo>getRunningServices(int maxNum)

说明: 获取系统里所有正在运行的服务

参数:可能服务的最大值(赋予一常数即可,20、50都OK)

public List<ActivityManager.RunningTaskInfoo>getRunningTasks(int maxNum)

说明:获取系统里正在运行的服务

参数: 同上

public List<ActivityManager.RecentTaskInfo>getRecentTasks(int maxNum, int flags)

说明:获取系统里最近启动的任务

参数: 同上,flags一般为0即可

public voidkillBackgroundProcess(String packageName)

说明:立即杀掉给定包名的进程,释放进程占用的资源(内存等),如果需要,系统会再次重新启动该进程。系统

PS:系统进程是杀不死的,只能杀死用户进程。但我没有找到好的方法辨别系统进程还是用户进程。但可以肯定的是,

能够杀死的一定是用户进程。

public void restartPackage(String packageName)

说明:该方法已弃用,等同于killBackgroundProcess 。

ActivityManager.MemoryInfo类
常用字段:

long availMem系统可用内存

long threshold系统内存不足的阀值,即临界值

boolean lowMemory 如果当前可用内存<=threshold,该值为真

ActivityManager.RunningAppProcessInfo类
常用字段:

int pid 进程ID

int uid 进程所在的用户ID

String processName 进程名,默认是包名或者由android:process=””属性指定

String [ ] pkgList 运行在该进程下的所有应用程序包名

对ActivityManager.RecentTaskInfoActivityManager.RunningServiceInfoActivityManager.RunningTaskInfo

类的介绍留在后文介绍。

DEMO说明:

我们通过ActivityManager获取了系统的可用内存信息以及正在运行在系统里的进程具体信息,当然你也可以选择

手动杀死这些进程,不过前提是用户进程,因为系统进程是杀不死的。

——————————————————————————————————————————

ApplicationManager-

Debug-

ActivityManager.MemoryInfo mMemoryInfo = new ActivityManager.MemoryInfo();

Debug.MemoryInfo dm = new Debug.MemoryInfo();

System.out.println(

// ""+Runtime.getRuntime().maxMemory()

// +"||"+"总共�?+Runtime.getRuntime().totalMemory()

// +"||"+"剩余�?+Runtime.getRuntime().freeMemory());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: