java - 清除android P中的最近任务
问题描述
@RequiresApi(api = Build.VERSION_CODES.M)
public static void clearRecentApps() {
ActivityManager mActivityManager;
Method mRemoveTask;
try {
Class<?> ActivityThread = Class.forName("android.app.ActivityThread");
Method method = ActivityThread.getMethod("currentActivityThread");
Object currentActivityThread = method.invoke(ActivityThread);
Method method2 = currentActivityThread.getClass().getMethod("getApplication");
Context contextInstance = (Context) method2.invoke(currentActivityThread);
Class<?> activityManagerClass = Class.forName("android.app.ActivityManager");
mActivityManager = (ActivityManager) contextInstance.getSystemService(Context.ACTIVITY_SERVICE);
print("Clear all recent tasks!!");
mRemoveTask = activityManagerClass.getMethod("removeTask", int.class);
mRemoveTask.setAccessible(true);
List<ActivityManager.RecentTaskInfo> recents =
mActivityManager.getRecentTasks(Integer.MAX_VALUE, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
for (ActivityManager.RecentTaskInfo recent: recents) {
ComponentName cn = recent.baseActivity;
if (cn == null) continue;
String pkg = cn.getPackageName();
if (pkg.contains("launcher")) continue;
print("--> Clear activity \"%s\"", pkg);
mRemoveTask.invoke(mActivityManager, recent.persistentId);
}
} catch (Exception e) {
e.printStackTrace();
}
}
该方法在android P之前有效,但android P没有,我查看了android P的源代码,类activitymanager已经删除了API“removeTask”,所以我想知道另一种选择是什么?我试过“列出 appTasks = mActivityManager.getAppTasks();”
解决方案
推荐阅读
- c# - Entity Framework Core 到 SQL Server IN 子句
- c# - RESTFUL Web 服务 v 使用 Scatter Gatherer 时的消息队列
- c# - c# 将列表项传输到列表框
- java - 从同名类继承Java
- powershell - 启用 Windows Office 功能(OneNote Office Standard 2013)
- java - 无法使用 Buildozer 编译 APK
- c++ - 写代码,不会导致很多页错误
- r - 用另一个数据框的值替换值
- mercury - How do I specify compile time defines in Mercury?
- redux - 将更高级别的减速器与组合的较低级别的减速器一起使用