getRecentTasks过程

应用 Launcher WmtSidebar.java 调用 getRecentTasks

 

Framework 中的 ActivityManager.java ActivityManager.getRecentTasks

 

ActivityManagerNative.java ActivityManagerProxy.getRecentTasks

 

mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);

 

ActivityManagerNative.java onTransact 函数里 reply.writeTypedList(list);

 

ActivityManager.java RecentTaskInfo.writeToParcel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取最近打开过的任务列表后,我们可以将其保存到本地文件或者数据库中,以便下次使用时能够快速地加载任务列表。具体实现方法如下: 1. 创建一个Task类,用于保存每个任务的信息,例如任务名称、包名、图标等。 2. 在获取最近打开过的任务列表时,遍历任务列表,将每个任务的信息保存到Task对象中,然后将Task对象添加到一个List集合中。 3. 将List集合中的Task对象保存到本地文件或者数据库中,例如可以使用SharedPreferences或者SQLite数据库来进行保存。 4. 在下次使用时,从本地文件或者数据库中加载任务列表,并将其显示在界面中。 下面是一个简单的示例代码: ``` // 定义Task类 public class Task { private String name; private String packageName; private Drawable icon; // 构造方法 public Task(String name, String packageName, Drawable icon) { this.name = name; this.packageName = packageName; this.icon = icon; } // getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } } // 获取最近打开过的任务列表 ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasks(10, ActivityManager.RECENT_IGNORE_UNAVAILABLE); List<Task> taskList = new ArrayList<>(); for (ActivityManager.RecentTaskInfo taskInfo : recentTasks) { String packageName = taskInfo.baseIntent.getComponent().getPackageName(); String name = taskInfo.baseIntent.getComponent().getClassName(); Drawable icon = getPackageManager().getApplicationIcon(packageName); Task task = new Task(name, packageName, icon); taskList.add(task); } // 将Task对象保存到SharedPreferences中 SharedPreferences sp = getSharedPreferences("task_list", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); for (int i = 0; i < taskList.size(); i++) { Task task = taskList.get(i); editor.putString("name_" + i, task.getName()); editor.putString("package_" + i, task.getPackageName()); // TODO: 将Drawable转换成Base64字符串后保存到SharedPreferences中 } editor.commit(); // 从SharedPreferences中加载Task列表 List<Task> loadedTaskList = new ArrayList<>(); for (int i = 0; i < taskList.size(); i++) { String name = sp.getString("name_" + i, null); String packageName = sp.getString("package_" + i, null); // TODO: 从SharedPreferences中读取Base64字符串并转换成Drawable Drawable icon = null; if (name != null && packageName != null && icon != null) { Task task = new Task(name, packageName, icon); loadedTaskList.add(task); } } // 显示Task列表 // TODO: 将loadedTaskList显示在界面中 ``` 需要注意的是,由于Drawable对象无法直接保存到SharedPreferences中,我们需要将Drawable对象转换成Base64字符串后再进行保存。同样,在从SharedPreferences中加载Drawable对象时,需要将Base64字符串转换成Drawable对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值