«

getRunningTasks接口在Android LL上的使用

时间:2024-3-2 17:26     作者:韩俊     分类: Android


最近在做的一个小项目中,需要实时获取Activity栈顶以及它所属的App Process。

根据之前的了解,知道Android API有提供一个接口

public List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)

可以得到系统当前正在运行的Task列表,用maxNum限制要获取的数量(最近使用的最先取出)。

实际运行程序时,发现并不能实时获取当前的Activity栈顶。

(使用的是Android L的机器进行调试)

原因:

Android L开始,Google开始对getRunningTasks接口进行限制使用。

默认情况下,普通的三方应用(非系统应用不能使用该接口)

之前,使用该接口需要 android.permission.GET_TASKS

即使是自己开发的普通应用,只要声明该权限,即可以使用getRunningTasks接口。

但从L开始,这种方式以及废弃。

应用要使用该接口必须声明权限android.permission.REAL_GET_TASKS

而这个权限是不对三方应用开放的。(在Manifest里申请了也没有作用)

系统应用(有系统签名)可以调用该权限。

同时,查阅了ActivityManager里该接口的源码,对于普通的三方应用,应该只是允许eng版本的debug使用,而且google不建议在应用的核心逻辑里使用该接口。

在Android LL版本上使用该接口出现问题的话,可以参考以上内容。

Google这样做的原因还是出于安全考虑,对普通应用开发该接口可能会造成用户的隐私泄露。

标签: android

热门推荐