ActivityManager 和 内部类 RecentTaskInfo的学习

本文介绍了Android中的ActivityManager及其内部类RecentTaskInfo,详细讲解了ActivityManager如何管理应用的Activity和服务,重点阐述了getRecentTasks()方法的使用,以及RecentTaskInfo在记录最近任务中的作用。此外,还提到了在Android 5.0后此方法的使用限制,并强调了获取一手资料的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为最近在做一个关于获取任务栈列表的功能,所以需要学习了解ActivityManager和RecentTaskInfo类,就写个文章记录一下。


首先,阅读官方文档关于这两部分的api介绍(ActivityManagerRecentTaskInfo

一、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方法(请看下一篇)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值