因为最近在做一个关于获取任务栈列表的功能,所以需要学习了解ActivityManager和RecentTaskInfo类,就写个文章记录一下。
首先,阅读官方文档关于这两部分的api介绍(ActivityManager、RecentTaskInfo)
一、ActivityManager部分api解读:
1.ActivityManager继承自Object对象,主要是对application中的activity、service和process的交互管理。他的初始化方法为使用Context.getSystemService(Class) 并申明ActivityManager.class类;或者使用Context.getSystemService(String),String申明为Context.ACTIVITY_SERVICE.
这里可以看文档截图,如图:
代码写法,例如:
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
关于Activity的管理,我们要知道它是通过Task stack(任务栈)的方式来管理的,比如对于一个task中的activity,可以通过内部类AppTask的方式来管理。AppTask主要是用来进行对于一个app的activity的管理,而对于多个app的activity的记录,则要通过内部类RecentTaskInfo类来实现。
2.Nested Classes总览:
ActivityManager.AppTask: 管理你自己application的任务。
ActivityManager.MemoryInfo:管理可用内存的类,初始化使用方法 getMemoryInfo(ActivityManager.MemoryInfo)
ProcessErrorStateInfo:管理进程出错状态的类。
RecentTaskInfo:记录了最近开始或者浏览的任务的类(我们主要是学习它)。
RunningAppProcessInfo:记录正在运行的进程的类。
RunningServiceInfo:记录的是正在运行在系统中的服务的类。
RunningTaskInfo:记录的是正在运行在系统中的任务的类。
TaskDescription:记录的是当前Activity在Recent list Task中的具体信息。
3.getRecentTasks(int maxNum, int flags) 讲解:
该方法主要是用来获得近期浏览或者启动的activity的列表,这个activity的列表是不同application的。
这个方法在5.0(API 21)之后就废弃了,但是作为系统应用的话,还是可以使用的。(这里,我在最开始查阅相关博客的时候,得到的结论都是不可用了,但是我们阅读官网文档会发现,他只是说不在支持第三方应用继续使用,而且只是不完全废弃,为了向前兼容性,还是可以返回部分不敏感数据的。)
(这里告诉我们,获得第一手的资料是多么重要!)
该方法返回的类型是:List<ActivityManager.RecentTaskInfo>,我们在具体使用的时候要解析List数组。
二、RecentTaskInfo类的解读:
1.RecentTaskInfo extends Object类,implement Parcelable,是一个static(静态)的方法。【注:静态方法只能访问静态变量,实例方法可以访问实例变量和静态变量】 RecentTaskInfo类主要是用来记录近期浏览或者启动的activity。
2.Fileds(字段)解读:
affiliatedTaskId:与其他任务分组的任务关联。
baseActivity:返回的是ComponentName(组件名称)类型,(ComponentName的作用主要是可以打开其他应用,参考博客点击这里)beseActivity主要是可以被看做Task的根Activity。
baseIntent:根Intent,返回一个Intent对象,作用是可以通过Intent启动Task,这里Task很多时候指的是Application。
description:描述了Task的最后状态,返回的是一个CharSequence类型。
id:描述当前Task是否在运行状态,如果不在运行状态,id为-1。
numActivities:描述Task包含的activity数量。
origActivity:简单讲就是获取当前运行task的实际activity,返回的是一个CompantName。如果别名是组件就可以初始化,否则就返回空。
persistentId:返回真实的标识符(id),不论task是否在运行。
taskDescription:获得栈中当前最活跃的activity的数据,返回的是一个taskDescription对象,解析taskDescription对象,可以获得id,icon,lable等属性值。
topActivity:获得的是history stack中的top Activity,表示的是当前正在运行的Activity。
更新:
如何删除Recent List方法(请看下一篇)