您的位置:首页 > 移动开发

android5.1 recentApp 移除全部

2016-07-11 20:29 429 查看
在android5.1 原生的recents App 加个功能,一个按钮,点击清空任务列表。

阅读systemUI 源码,recents App代码逻辑位于com.android.systemui.recents 包下。

在manifest.xml中可以找到RecentsActivity,也就是说任务列表是个activity,而且singleInstance.附manifest声明。

<activity android:name=".recents.RecentsActivity"
android:label="@string/accessibility_desc_recent_apps"
android:exported="false"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
android:stateNotNeeded="true"
android:resumeWhilePausing="true"
android:theme="@style/config_recents_activity_theme">
<intent-filter>
<action android:name="com.android.systemui.recents.TOGGLE_RECENTS" />
</intent-filter>
</activity>


以下列出清空任务列表关键类,SystemServiceProxy.java  

有个getRecentTasks();方法,该方法通过ActivityManager的getRecentTasksForUser()获取任务列表数据,得到List<ActivityManager.RecentTaskInfo>,

也就是说在systemUI的recentsApp中,这是数据源。

在getRecentTasksForUser()中,只有一行代码,new ActivityManagerNative().getDefault().getRecentTasks();

核心逻辑在ActivityManagerNative中;

移除单个任务的方法是 removeTask();同样通过ActivityManager调用removeTask(),然后activityManagerNative做移除操作。

好了,既然可以获取全部,又可以移除单个,做下foreach 就可以移除全部了。 

注意,removeTask()有个参数是taskId,通过阅读代码得知, 就是RecentTaskInfo.persistentId字段。

(见RecentsTaskLoadPlan.java  preloadRawTasks()及preloadPlan())

preloadRawTasks() 通过SystemServiceProxy得到List<RecentTaskInfo>,

prepladPlan()遍历List,创建Task.TaskKey对象,其中taskId 就是这是赋值的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: