为了更好地理解活动,任务,每个任务的后端堆栈和不同的launchModes之间的关系,我想编写一个包含大约7个活动的应用程序,在3个任务中运行,其中活动在不同的launchModes中启动,当我正在运行时,我希望显示每个活动的堆栈,并在我浏览应用程序并启动或关闭不同的活动时观察它们的变化。
如何获取当前应用程序的所有任务列表,然后获取这些任务堆栈上的活动? ActivityManager class让我根据最近或正在运行的内容查询任务信息,但如何查询当前应用的任务信息?
提前致谢。
答案 0 :(得分:4)
如何获取当前应用程序的所有任务列表
没有这样的概念。任务可以包含来自应用程序的活动。举一个类比,没有任何网站拥有浏览器标签的后台堆栈,尽管网站的页面可能位于浏览器标签的后台堆栈中。
然后获取这些任务堆栈的活动?
这是不可能的,因为活动不一定都来自你的过程。
ActivityManager类允许我根据最近或正在运行的内容查询任务信息,但如何仅针对当前应用查询任务信息?
严格来说,你没有。
您可以迭代正在运行的任务,并且可以根据这些baseActivity
值找到您的某个活动为topActivity
或ComponentName
的那些活动。
或者,您的活动知道他们的任务ID,获得via getTaskId()
。如果需要,您可以在正在运行的任务中找到这些任务,匹配ID值,以找出有关活动任务的任务级详细信息。
答案 1 :(得分:2)
从sdk 21版开始,您现在可以调用ActivityManager.getAppTasks()来获取属于您的应用程序的任务。
答案 2 :(得分:1)
如果您有权访问adb,则可以使用以下命令查看所有可用的任务和堆栈。
adb shell am stack list
答案 3 :(得分:0)
使用下面的代码你可以获得任务编号
if (Build.VERSION.SDK_INT >= 29) {
val activityManager = getSystemService(ACTIVITY_SERVICE) as ActivityManager
val tasks = activityManager.appTasks
tasks.forEach {
logApp("it.taskInfo.numActivities:${it.taskInfo.numActivities}")
}
}