2017-10-14 113 views
0

我的活動已經在manifest文件:已經在清單中設置Intent.FLAG_ACTIVITY_NEW_TASK是多餘的?

android:launchMode="singleTask" 

現在,如果我從我的代碼,並使用啓動本次活動:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

這是多餘的?

什麼緊靠此標誌:

Intent.FLAG_ACTIVITY_SINGLE_TOP 

這是多餘的?

謝謝!

+0

你說冗餘是什麼意思?你需要知道「singleTask」是否被覆蓋或不被覆蓋? – azizbekian

+0

冗餘我的意思是沒有必要,因爲它已經在清單中定義,它不會改變任何東西。就像在連續兩次將變量設置爲相同的值時一樣。第二次是多餘的。 – Chris

回答

0

1.關於singleTask

Application Fundamentals頁的Android開發人員指南:

默認情況下,在 應用程序的所有活動,對其他各 的親和力 - 這是,他們都有一個首選 屬於同一個 任務。

「singleInstance」活動僅代表 作爲其 任務中的唯一活動。如果它啓動另一個活動,則該活動將被啓動到 不同的任務中,而不管其啓動模式爲 - 好像 FLAG_ACTIVITY_NEW_TASK在 意圖中。在所有其他方面, 「singleInstance」模式與 「singleTask」相同。

如上所述,從未有更多 比一個「singleTask」或 「singleInstance」活動的情況下,使 實例預計處理所有新 意圖。 「單實例」活動 始終位於堆棧頂部 (因爲它是 任務中的唯一活動),所以它始終處於處理意圖的位置。但是, 「singleTask」活動可能會或可能不會 在 堆棧中有其他活動。如果是這樣,則不會在 的位置處理該意圖,並且 意圖被丟棄。 (即使 意圖被丟棄,它的到來將 造成任務前來 前景,它將會繼續存在。)

因爲從來就沒有與任何發射活動的多個實例模式下,後退按鈕將始終帶您到您案例中活動的現有實例。

一個重要的區別是,「singleTask」不需要爲選擇某項內容的新活動創建新任務。也不必每次都在後退按鈕上刪除新的任務。由於你的活動堆棧都屬於一個用戶的「任務」,並且聽起來不像你有一個錯綜複雜的Intent結構,其中singleInstance可能有利於總是處理它們,所以我建議使用singleTask啓動模式。

這裏是一個很好的博客文章獲得更多信息,以及貸記圖像:Android Activities and Tasks series – An introduction to Android’s UI component model

2.關於singleTop

如果singleTop模式活動的一個啓動的實例中已經存在任務堆棧棧頂,然後在沒有創建新實例時重新啓動Activity,但是在這種情況下,重新使用堆棧頂部,並且會調用方法的實例將Intent對象傳遞到此實例中。例如,如果A singleTop的啓動模式,一個例子,一個在堆棧的頂部已經存在,則調用startActivity (New Intent (this, A.class)) A開始時,A情況將不會再次創造,而是重新使用原來的實例,並調用原onNewIntent (method)的實例。這是這個任務的堆棧或A. 如果singleTop模式活動的啓動已經存在和任務堆棧的例子,但不是在堆棧頂部,那麼它的行爲和標準相同的模式,還將創建多個實例。你可以看一下understand-android-activity-launchmode

編輯

這不是多餘的。

爲了記錄用戶打開這些活動,記錄這些活動開放的順序,谷歌引入了任務堆棧的概念,以幫助保持良好的用戶體驗。

活動的啓動模式可能會影響任務的堆棧。而Intent標誌也會影響到任務的堆棧。

您可以修改代碼的任務堆棧模式沒有在清單文件中修改它,和標誌可以直接影響任務的堆棧。

就像android:text="content"在XML代碼。而tv.setText("content");是在Java代碼中。

+1

我不認爲你回答我的問題。它已經在文檔中解釋了singleTop,singleInstance ...的功能。你能回答我的問題,而不是談論singleInstance嗎? – Chris

相關問題