2012-12-17 35 views
0

我閱讀了關於任務和回棧的內容,但仍然沒有混淆。我只是在嘗試不同的事情,並且討論了一個案例。舉個例子: 我們有兩個應用程序A1和A2。 A1有一個活動,稱爲A1_first(也是主要活動),A2有兩個活動A2_first(主要活動)和A2_second。 A2_second是一個singleTask活動。 A1_frist在按下按鈕時調用A2_second,A2_first在按鈕按下時調用A2_second。理解回棧和任務難度

如果我啓動A2我可以看到A2_first屏幕,按下按鈕後我去A2_second(如預期),但假設我第一次推出A1和後按下按鈕A2_second,現在從發射按Home鍵,並再次A2圖標,我達到了A2_秒,但我預計會達到A2_first。

我不明白我錯過了什麼。有人可以解釋 按A2 A1_first -----> A2_second ----> home -----------------> A2_second(爲什麼不是A2_first ?? A2_first是主要活動對於A2)。

回答

2

應用程序如果啓動從主屏幕中的應用程序,它並不一定帶你到該應用程序的第一個活動的更多細節。如果應用程序已經運行,它只會返回到您在應用程序中停止的位置。這就是你所看到的。另外,你使用「singleTask」啓動模式使事情變得更加複雜。一般來說,您不應該使用「singleTask」或「singleInstance」啓動模式。這些是非常特殊的啓動模式,主要用於創建HOME屏幕替換。無論如何,如果您需要使用其中一種特殊啓動模式,則需要確保針對使用這些啓動模式的活動有不同的應用程序圖標。如果你有不同的A2_first和A2_second應用程序圖標,那麼它會更明顯。

+0

約定大衛,我不應該使用單一的任務,但我不使用這個來創建任何應用程序,我試圖做深入的潛水。 我仍然有疑問,因爲當我點擊圖標時,我看到整個任務進入前臺(並且你看到你離開的位置),但在這種情況下,A2_first和A2_second應該屬於不同的任務,如「http://developer.android .com/guide/components/tasks-and-back-stack.html「: 」SingleTask「系統創建一個新任務並在新任務的根目錄下實例化活動。 所以如果我按A2的圖標任務相關的A2_first應該在前臺。 – user1875798

+1

不是。它比這更復雜。還有「taskAffinity」的概念。由於A2_first和A2_second具有相同的「taskAffinity」,所以當您按下A2圖標時,它會將任何任務帶到具有此taskAffinity的前景。如果你真的想要單獨的任務,那麼你需要使用單獨的圖標,併爲A2_second設置「android:taskAffinity =」「'。 –

+0

謝謝loooooooooooooooot ...明白了你的觀點。 – user1875798

0

如果我正確理解你,你不退出應用程序,但只是按主頁按鈕。如果應用程序狀態未被更改,它將從緩存中返回,並且在按回家之前打開的同一活動已打開。

嘗試How to finish() an Activity when Home button pressed關於如何完成的Home鍵按下

0

如果您從活動A開始(成功)完成活動B,然後按「返回」,您將回到活動A中。獨立於這些活動所屬的應用程序。

在Android中沒有標準的「家」命令返回,對不起。例如,在我的手機上,「主頁」將返回到開始屏幕,並將所有活動置於後臺。顯然,你不是這個意思。

我這還不夠,放在這裏的代碼,包含活動調用和處理退貨。很難說不知道的是,你的呼叫按鈕和返回過程究竟做了什麼。

在理解任務和後臺之前,我建議先理解開始/返回的活動。

0

當您按下home鍵,A2_second只是進入後臺。它並沒有結束(完成)。所以當你點擊A2圖標時,系統將從A2中查找上次訪問的活動(如果有的話)。由於A2_second可用且處於後臺狀態 - 系統將簡單地將其稱爲前臺。

這就是Android如何建立多任務處理。整個應用程序(所有的活動)不會一次加載到內存中。相反,應用程序會被分解成可在需要時加載的功能塊(活動)塊。所以當你從另一個應用程序(從A1_first調用A2_second)調用一個活動,然後按回家時,此活動(A2_second)將轉到後臺。當您單擊A2圖標時,由於系統知道A2_second在後臺,因此用戶最後訪問了該圖標並且可能是他/她正在查找的部分,所以它會被置於前臺。

但是,如果按「返回」,A2_second將結束。在此之後,如果您點擊A2圖標,則A2_first將啓動。

通過這種方式,來自各種應用的不同部分(活動)可以共存於內存中,併爲用戶提供無縫體驗,同時保持系統的快速和靈活。