當我通過URL啓動我的應用程序時,我看到了啓動器活動的第二個實例。我試過使用singleInstance作爲launchMode,它阻止了另一個實例的創建,但它也有一些令人討厭的副作用。通過計劃URL啓動時我的Android活動的多個實例
一個副作用是:
- 啓動通過圖標
- 打開主菜單的另一個活動我的應用程序。
- 單擊主頁按鈕。
- 再次啓動我的應用程序通過圖標
- 的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。
經過一番玩一下,我注意到:
- 我沒有看到第二個實例,如果我用一個單一的方法來啓動我的應用程序即。點擊一個URL或使用啓動器圖標。
- 我只在使用/混合兩種方法啓動我的應用程序時看到第二個實例。
這表明通過URL和圖標點擊的啓動方法是不同的。當我的活動實例已經運行並且啓動了新實例時,正在調用onCreate。這會創建一個新的活動 - 我想用onNewIntent來代替。
「我的應用程序的第二個實例在我通過URL啓動時啓動」 - 否,事實並非如此。只有一個應用的副本。將會有*活動*的第二個實例。 – CommonsWare 2015-02-07 14:46:23
編輯我的問題的人沒有做過最棒的工作。 – 2016-09-08 10:26:31