当我通过网址启动我的应用时,我看到了我的启动器活动的第二个实例。我尝试使用singleInstance作为launchMode,它确实阻止了另一个实例的创建,但它也有一些令人讨厌的副作用。
一个副作用是:
我知道这种预期的行为,因为我查看了Android文档中的launchmodes。
我的问题是,有没有其他方法可以在不使用singleInstance启动模式的情况下阻止我的活动的单个实例?
如果我必须使用singleInstance,那么在重新启动应用程序时如何保留活动后台堆栈?
以下是我的清单的一部分,显示没有
的主菜单活动<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和图标点击的启动方法是不同的。当我的活动实例已经运行并且启动了一个新实例时,将调用onCreate。这会创建一个新活动 - 我想改为调用onNewIntent。
答案 0 :(得分:1)
我尝试使用singleTask
,但我仍然看到了我的应用的两个实例。
然后我偶然发现了一篇博文Android singleTask LaunchMode。它表示singleTask
活动不能有<intent-filter>
。
所以我实现了一个启动器活动,现在我的应用程序运行正常。