【问题标题】:Set activity launch mode programmatically以编程方式设置活动启动模式
【发布时间】:2013-10-03 09:27:21
【问题描述】:
我需要根据我的应用状态使用不同的launchMode 调用活动。在一种情况下应该是singleInstance,在另一种情况下应该是singleTask。我知道如何在 AndroidManifest 中设置launchMode,但由于它应该是动态属性,我必须从代码中进行设置。我想,在开始活动之前,我可以在意图中添加一些特定的标志,但我发现只有singleTop 标志。那么有什么办法可以解决这个问题吗?
谢谢
【问题讨论】:
标签:
android
android-intent
android-activity
launchmode
【解决方案1】:
在我的情况下,我需要两个与不同 android API 级别相关的不同启动模式:
在 AndroidManifest 中
android:launchMode="@integer/launchModeAPIlevel"
文件夹内的不同整数值 values-18, values-21
<integer name="launchModeAPIlevel">1</integer>
启动模式 1 == singleTop
单任务 == 2
【解决方案2】:
经过一些调查,我注意到以这种方式不可能做到这一点。但好消息是我有一些解决方法:
你必须创建两个Activities,每个都有对应的launchModes。
一个Activity 是真正的Activity,其中包含您的代码,另一个将在onCreate() 方法中调用main Activity,但由于它需要launchMode,因此main Activity 将以该模式启动。不是很好,但完全有效的解决方案。
之后,不要尝试使用意图标志打开您的 Activity,而是根据您需要的 launchMode 放入 Activity 的意图 class。
【解决方案3】:
只需创建两个活动 A 和 B,B 扩展 A。
在清单中为 A 声明 launchMode="singleTask",为 B 声明 launchMode="singleInstance"。
并根据你需要的launchMode启动Activity。