2011-06-07 55 views
3

在查看'Tasks and Back Stack'指南的'Defining launch modes'部分之後,我完全不瞭解使用「singleTask」聲明的活動的行爲。android-有關singleTask模式的問題

假設我啓動singleTask活性(通過startActivity方法)當存在活動在底部(根活性)一個後臺任務的鋪設的一個實例,

作爲文章描述,意圖我使用開始singleTask活動將被傳遞給實例,在這種情況下,實例是否將自己置於其任務的頂部並將其任務置於前臺,或者只是將其任務置於前臺而不將自己置於其任務的頂部?

我是否讓自己清楚?請幫忙!在此先感謝

+0

我想感謝人們,我該怎麼做?通過投票? – user718146 2011-06-08 01:22:46

+0

您必須回到之前提出的問題並接受解決問題的答案。目前你已經提出了8個問題,並沒有接受一個答案。 – 2011-06-08 02:06:35

+0

你可以看看這個aswer http://stackoverflow.com/questions/2417468/android-bug-in-launchmode-singletask-activity-stack-not-preserved – tantra35 2013-04-13 05:27:32

回答

7

我當時實際上有同樣的問題。 這裏閱讀計算器答覆,並做了一些實驗,我相信時雖然它已經在後臺任務一個singleTask活動啓動時,系統會殺死所有其他活動在堆棧頂部並恢復singleTask活動。

當然,這不是我從文檔中獲得的。

這是我的理論:

起動模式:活動A:singleTask,活動B:標準

實驗1個

  • 啓動A;堆棧:[A]
  • 從A啓動B;堆棧:[A | B]
  • 按回家;堆棧:[A | B]
  • 從發射器發射A;堆棧:[A] (的onDestroy被稱爲第B 上形成的onResume()之前)

實驗2

  • 啓動A;堆棧:[A]
  • 從A啓動B;堆棧:[A | B]
  • 從B啓動A;堆棧:[A] ()上的一個的onDestroy被稱爲基於B 的onResume(後)

就我而言,我不得不使用android:alwaysRetainTaskState="true"雖然這不是理想的,因爲我想堆被清除之後,說10分鐘的這一建議是有道理的:

如果用戶離開任務很長一段時間 ,系統將清除的 所有活動任務除了根 活動。當用戶再次返回到 任務時,只有根活動恢復爲 。該系統的行爲這種方式,因爲 的 時間延長的量之後,用戶可能已經放棄什麼 他們做之前,並 返回任務開始 新的東西。

來自Tasks and Back Stack指南。

我希望這可以幫助其他人。

+0

+1 ...很好的答案 – Anirudha 2013-07-01 05:34:10

0

如果Activity已存在,它將調用onNewIntent()Activity。由於Activity在收到新的Intent之前總是暫停,因此將在收到onNewIntent()後立即調用onResume()。調用onResume()這一事實意味着Activity將會出現在前臺並對用戶可見。

+0

謝謝你的回覆,現在肯定現有的實例會來到前景,但是,它是如何前景?將其頂部的這些活動彈出,直至完成該任務的頂部?或其他方法? – user718146 2011-06-08 01:19:31

+0

該文檔似乎沒有具體說明如何進入堆棧頂部。它只保證如果調用'onNewIntent()',那麼'onResume()'將會被調用,並且我們正在處理的'Activity'我們會到達前臺。 – 2011-06-08 02:05:19

0

那麼FLAG_ACTIVITY_CLEAR_TOP與單一任務有什麼不同?

只有FLAG_ACTIVITY_CLEAR_TOP是單個任務的一個子集的區別,只有當被調用的活動是當前任務的一部分時才起作用。