参考:
https://blog.csdn.net/huxueyan521/article/details/8921976(使用ActivityManager的forceStopPackage方法结束进程)
在使用ActivityManager的forceStopPackage方法时,如果关闭的是当前(栈顶)package的话,会抛出异常(**已停止运行)
所以,我们需要先把需要关闭的package移出栈顶位置,然后再关闭它.
直接贴代码
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(20);
if (runningTaskInfos != null) {
for(ActivityManager.RunningTaskInfo runningtaskinfo:runningTaskInfos){
if(!runningtaskinfo.topActivity.getPackageName().equals(runningTaskInfos.get(0).topActivity.getPackageName())){
activityManager.moveTaskToFront(runningtaskinfo.id,ActivityManager.MOVE_TASK_WITH_HOME);
activityManager.forceStopPackage(runningTaskInfos.get(0).topActivity.getPackageName());
break;
}
}
}
说明:
首先获取栈内任务,根据任务获取包名信息,通过比对,得到处于第二位的任务的包名.然后将该任务放置于栈顶(防止forceStopPackage方法导致的异常),将刚刚处于栈顶的任务对应的package销毁(我们只是将第二位的package的一个任务移动到了栈顶,它的其他任务依然处于栈中原来的位置,处于栈顶任务对应包所持有的任务之下,如果按返回键,将显示它们,所以必须销毁它们).
需要权限:
1.android.permission.REORDER_TASKS
2.android.permission.KILL_BACKGROUND_PROCESSES
3.android.permission.FORCE_STOP_PACKAGES
操作其他package需要声明为系统app