版权声明
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/17283985.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
前言
ActivityTaskManager,实现应用进程和运行在系统进程的 ActivityTaskManagerService 的通信; 可以通过它对后台任务RecentsActivity的实现一部分的功能。 另外个人刚接触这部分代码,此博客是暂时以记录功能的形式。并没有检验一些方法的实际功能。
个人体验部分功能,例如清除堆栈的功能还是不错的,可以配合用activityManager.killBackgroundProcesses来实现一键加速的功能。 另外查看堆栈信息也可以检测应用使用情况。
另外注意,此功能需要架framework包也需要系统级权限与系统签名
代码
/**
* 删除所有可见的近期任务
*/
fun removeAllVisibleRecentTasks() {
ActivityTaskManager.getService().removeAllVisibleRecentTasks()
}
/**
* 删除目标包名后台任务
*/
fun removeTask(context: Context, packageName: String) {
val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val runningTaskInfoList = activityManager.getRunningTasks(Int.MAX_VALUE)
for (item in runningTaskInfoList) {
if (item.topActivity.packageName == packageName) {
val taskId = item.id
ActivityTaskManager.getService().removeTask(taskId)
ActivityTaskManager.getService().removeStack(taskId)
break
}
}
}
/**
* 删除activity的后台任务
*/
fun removeTask(activity: Activity) {
ActivityTaskManager.getService().removeTask(activity.taskId)
ActivityTaskManager.getService().removeStack(activity.taskId)
}
/**
* 获取当前在前台运行应用的包名
*/
fun getCurrentRunPackageName(): String? {
val am: IActivityManager =
ActivityManagerNative.asInterface(ServiceManager.getService("activity"))
try {
val cn: ComponentName = am.getTasks(1).get(0).topActivity
return cn.getPackageName()
} catch (e: RemoteException) {
e.printStackTrace()
Log.e("lwlx", "获取当前在前台运行应用的包名失败")
return null
}
}
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/17283985.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。