最近在做的一个小项目中,需要实时获取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这样做的原因还是出于安全考虑,对普通应用开发该接口可能会造成用户的隐私泄露。