如何获取我的应用程序任务列表和活动堆栈?

时间:2013-04-09 16:25:40

标签: android

为了更好地理解活动,任务,每个任务的后端堆栈和不同的launchModes之间的关系,我想编写一个包含大约7个活动的应用程序,在3个任务中运行,其中活动在不同的launchModes中启动,当我正在运行时,我希望显示每个活动的堆栈,并在我浏览应用程序并启动或关闭不同的活动时观察它们的变化。

如何获取当前应用程序的所有任务列表,然后获取这些任务堆栈上的活动? ActivityManager class让我根据最近或正在运行的内容查询任务信息,但如何查询当前应用的任务信息?

提前致谢。

4 个答案:

答案 0 :(得分:4)

  

如何获取当前应用程序的所有任务列表

没有这样的概念。任务可以包含来自应用程序的活动。举一个类比,没有任何网站拥有浏览器标签的后台堆栈,尽管网站的页面可能位于浏览器标签的后台堆栈中。

  

然后获取这些任务堆栈的活动?

这是不可能的,因为活动不一定都来自你的过程。

  

ActivityManager类允许我根据最近或正在运行的内容查询任务信息,但如何仅针对当前应用查询任务信息?

严格来说,你没有。

您可以迭代正在运行的任务,并且可以根据这些baseActivity值找到您的某个活动为topActivityComponentName的那些活动。

或者,您的活动知道他们的任务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}")
        }
    }