2015-02-07 41 views
1

當我通過URL啓動我的應用程序時,我看到了啓動器活動的第二個實例。我試過使用singleInstance作爲launchMode,它阻止了另一個實例的創建,但它也有一些令人討厭的副作用。通過計劃URL啓動時我的Android活動的多個實例

一個副作用是:

  1. 啓動通過圖標
  2. 打開主菜單的另一個活動我的應用程序。
  3. 單擊主頁按鈕。
  4. 再次啓動我的應用程序通過圖標
  5. 的MainMenu的再次顯示,而不是我以前查看活動。

我知道這個預期的行爲,因爲我看過Android文檔中的launchmodes。

我的問題是,是否有任何其他方式阻止我的活動的單個實例,而無需使用singleInstance launchmode?

如果我必須使用singleInstance,當我重新啓動應用程序時,如何保留活動backstack?

下面是我的清單顯示的MainMenu活動的一部分,而不

<activity android:name="com.me.myapp.MainMenuActivity" android:label="@string/app_name" > 
<intent-filter> 
<category android:name="android.intent.category.LAUNCHER" /> 
<data 
android:host="mydomain.com" android:scheme="http" /> 
<action android:name="android.intent.action.VIEW" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<category android:name="android.intent.category.BROWSABLE" /> 
</intent-filter> 
</activity> 

我已經嘗試添加isTaskRoot到MainMenuActivity但是當我可以清楚地看到該活動的另一個運行實例這個總是返回true。

經過一番玩一下,我注意到:

  1. 我沒有看到第二個實例,如果我用一個單一的方法來啓動我的應用程序即。點擊一個URL或使用啓動器圖標。
  2. 我只在使用/混合兩種方法啓動我的應用程序時看到第二個實例。

這表明通過URL和圖標點擊的啓動方法是不同的。當我的活動實例已經運行並且啓動了新實例時,正在調用onCreate。這會創建一個新的活動 - 我想用onNewIntent來代替。

+0

「我的應用程序的第二個實例在我通過URL啓動時啓動」 - 否,事實並非如此。只有一個應用的副本。將會有*活動*的第二個實例。 – CommonsWare 2015-02-07 14:46:23

+0

編輯我的問題的人沒有做過最棒的工作。 – 2016-09-08 10:26:31

回答

1

我試過使用singleTask,但我仍然看到我的應用程序的兩個實例。

然後我偶然發現了一篇博文Android singleTask LaunchMode。它表示singleTask活動不能有<intent-filter>

所以我實現了一個啓動器活動,現在我的應用程序行爲正確。