权限
必须是一个系统app,增加以下权限:
代码
/**
* 移除最近任务
*
* @param taskId
*/
public void removeTask(int taskId) {
Log.d(TAG, "removeTask: " + taskId);
ActivityManager am = (ActivityManager) theContext.getSystemService(Context.ACTIVITY_SERVICE);
try {
Class> activityManagerClass = Class.forName("android.app.ActivityManager");
Method removeTask = activityManagerClass.getDeclaredMethod("removeTask", int.class);
removeTask.setAccessible(true);
removeTask.invoke(am, taskId);
} catch (ClassNotFoundException e) {
Log.i(TAG, "No Such Class Found Exception", e);
} catch (Exception e) {
Log.i(TAG, "General Exception occurred", e);
}
}
/**
* 通过包名清理任务
* @param packageName 包名
*/
public void clearRecentTaskByPackageName(String packageName) {
if (theContext == null) return;
List mRunningTasks = null;
try {
mRunningTasks = ActivityManagerNative.getDefault().getTasks(MAX_RECENT_TASKS, 0); //30表示获取的最大数
} catch (RemoteException e) {
e.printStackTrace();
}
for (ActivityManager.RunningTaskInfo amTask : mRunningTasks) {
if (packageName.contentEquals(amTask.baseActivity.getPackageName())) {
removeTask(amTask.id);
}
}
}
/**
* 清理没有正在运行的任务
*/
public void clearRecentListByUnused() {
List taskIdList = new ArrayList<>();
List runningTasks = null;
try {
runningTasks = ActivityManagerNative.getDefault().getTasks(MAX_RECENT_TASKS, 0);
} catch (RemoteException e) {
e.printStackTrace();
}
for (ActivityManager.RunningTaskInfo amTask : runningTasks) {
taskIdList.add(amTask.id);
Log.d("TaskInfo", amTask.baseActivity.getPackageName() + "(" + amTask.id + ")");
}
ActivityManager am = (ActivityManager) theContext.getSystemService(Context.ACTIVITY_SERVICE);
List recentTasks = am.getRecentTasks(MAX_RECENT_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
for (int i = 0; i < recentTasks.size(); ++i) {
ActivityManager.RecentTaskInfo info = recentTasks.get(i);
if(info.id == -1 || !taskIdList.contains(info.persistentId))
removeTask(info.persistentId);
}
}
Sharezer , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android 移除最近任务!