2013-04-09 28 views
3

爲了更好地理解活動,任務,每個任務的後備棧和不同的launchModes之間的關係,我想編寫一個包含大約7個活動的應用程序,運行3個任務,其中的活動在不同的launchModes中啓動,當我正在運行時,我想顯示每個活動的堆棧,並在導航我的應用程序並啓動或關閉不同的活動時觀察它們的變化。如何獲取我應用程序的任務列表以及他們的活動堆棧?

如何獲得當前應用程序的所有任務列表,然後獲取這些任務堆棧上的活動? ActivityManager class允許我根據最近或最新運行的內容查詢任務信息,但是如何查詢僅用於當前應用程序的任務信息?

在此先感謝。

+1

「任務」不屬於應用程序,「應用程序」不屬於任務。任務可以具有不同應用程序中的不同活動,並且應用程序可以具有在不同任務中運行的活動。 – 2013-04-09 16:51:53

+0

有一個開源的程序,幾乎這樣做。這是一個很好的工具,用於瞭解事情並瞭解launchModes和Intent標誌如何表現(或不表現)。看看https://github.com/gnorsilva/Activities-LaunchMode-demo – 2013-04-09 16:54:32

+1

Android中缺乏的一件事就是以編程方式查看任務中的活動堆棧。如果可能的話,會有很多應用程序得到改進。另外,調試會更容易。可悲的是,這是不可能的:-( – 2013-04-09 18:00:36

回答

3

我怎樣才能得到所有任務的列表我目前的應用

沒有這樣的概念。任務可以從包含來自應用程序的活動。繪製一個類比,沒有網站擁有瀏覽器選項卡的後退堆棧,儘管網站的頁面可能位於瀏覽器選項卡的後退堆棧中。

然後在這些任務的堆棧上獲取Activities?

這是不可能的,因爲這些活動不一定都來自您的過程。

ActivityManager類允許我根據最近或最新運行的內容查詢任務信息,但是如何查詢僅用於當前應用程序的任務信息?

嚴格來說,你不這樣做。

您可以遍歷正在運行的任務,並且可以根據這些ComponentName值找到其中一個活動爲baseActivitytopActivity的那些活動。

或者,您的活動知道他們的任務ID,獲得via getTaskId()。如果需要,您可以在正在運行的任務中找到這些任務,並匹配ID值,以找出有關活動任務的任務級別詳細信息。

+0

好的,找出我的活動正在運行哪些任務(通過getTaskID,如你所建議的)將給我一個任務列表。一旦我有任務ID,我該如何打破下來堆棧,所以我可以看到我的活動在堆棧中的其他活動的位置? – user316117 2013-04-09 17:02:44

+0

@ user316117:「我如何分解堆棧以便我可以看到我的活動與堆棧中的其他活動相關的位置?「 - 我不相信這是可能的。 – CommonsWare 2013-04-09 17:04:54

1

從sdk版本21,你現在可以調用ActivityManager.getAppTasks()來獲取屬於你的應用程序的任務。

0

如果您有權訪問adb,則可以使用下面的命令查看所有可用的任務和堆棧。

adb shell am stack list 
相關問題