Android 13后台任务一键清理功能实现
测试包名:
android.test.settings
需要系统签名与android.uid.system条件
代码如下:
 private void killRecentTasks(Context mContext) {ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);Object service = mContext.getSystemService("activity_task");try {Method removeTask = Class.forName("android.app.ActivityTaskManager").getMethod("removeTask", int.class);removeTask.setAccessible(true);List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasks(10, ActivityManager.RECENT_IGNORE_UNAVAILABLE);for (ActivityManager.RecentTaskInfo rt : recentTasks) {int taskId;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {taskId = rt.taskId;} else {taskId = rt.id;}ComponentName componentName = rt.baseActivity;if (componentName == null) {componentName = rt.baseIntent.getComponent();}String packageName = componentName.getPackageName();String className = componentName.getClassName();if ("android.test.settings".equals(packageName) || "com.android.launcher3".equals(packageName)) {continue;}Object invoke = removeTask.invoke(service, taskId);Log.e(TAG, "removeTask result --> taskId:" + taskId + " pkg:" + packageName + " clz:" + className + " ret:" + invoke);}} catch (NoSuchMethodException | ClassNotFoundException | IllegalAccessException |InvocationTargetException e) {e.printStackTrace();Log.e(TAG, "aaa: " + e);}}
