2016-04-25 56 views
3

我想保留每個Activity單個實例我開始在我的應用程序中。 launchMode singleTask是一個選項,但它僅適用於一個Activity僅保留整個應用程序中的每個活動的一個實例

我想

  • 如果沒有實例,它被稱爲啓動一個Activity
  • 並且如果該Activity的任何其他實例已經存在,那麼該實例將在未創建該Activity的新實例 的情況下被帶到前面。
  • 此屬性將應用於多個Activity
  • Activity確保它始終位於歷史堆棧的頂部。

我的工作至今:

我得到了許多建議其不適用於我的情況,所以我想指出這些了,這樣其他人會給出相同的建議。

  • 我已經設置了launchModesingleTop,如果Activity處於歷史堆棧的頂部這隻適用。如果Activity位於歷史堆棧的頂部,則僅調用onNewIntent()。在我的情況下,Activity可能在堆棧中的任何位置。所以這不起作用。
+0

使用singleTop的每個活動 – Nfear

回答

5

當你啓動一個Activity,像這樣做:

Intent intent = new Intent(this, MyActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

如果Activity的實例已經存在,那麼它會被移動到前面。如果一個實例不存在,則會創建一個新實例。

+1

解決了我的問題。謝謝 。 –

+1

@David Wasser:對我來說同樣的問題。爲我的問題工作,歡呼! – AJW

0

使用singleTop啓動模式,而不是(docs):如果已經是在棧中的調用者任務上同類型的活動情況,不會有任何新創建的活動,而不是意圖將在通過onNewIntent()方法發送到現有的Activity實例。

有關啓動模式的詳細信息,另請參閱this article

+0

都會試試看。並讓你知道。 –

+0

所以我認爲活動必須在歷史堆棧的頂部才能在您給定的條件下工作。我的情況並非如此。請糾正我,如果我錯了@Marcin。 –

+0

好吧,我的問題稍有不同。實際上,@ david-wasser使用'FLAG_ACTIVITY_REORDER_TO_FRONT'的答案沒問題,我正在讚揚他的 –

2

您可以設置機器人:您的活動launchModesingleTop 在這種情況下,如果該活動已經存在,新的意圖將其帶到前將交付給該活動的onNewIntent() http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

如果您的活動位於堆棧的頂部,這將起作用。

,如果你想有活動的一個實例,那麼你就可以在你的launchMode設置爲singleTask,但不建議這樣做,因爲它會讓你的活動駐留在一個單獨的任務,這可能會造成混淆給用戶。

+0

我假設這個活動必須在歷史堆棧的頂部才能在你給定的條件下工作。我的情況並非如此。如果我錯了,請糾正我@Mina。 –

+0

是的,你是對的,它必須在堆棧頂部 –

+0

,但我的情況是不同的。請參閱編輯的問題。 –

相關問題