singleTask 启动模式不起作用

Posted

技术标签:

【中文标题】singleTask 启动模式不起作用【英文标题】:singleTask launch mode is not working 【发布时间】:2018-11-05 14:40:42 【问题描述】:

即使在将launchMode 指定为singleTask 之后,我的活动的多个实例也会被创建这个奇怪的问题。有人遇到过这个问题吗?任何指针将不胜感激。

以下是我在清单中声明我的活动的方式:

    <activity
    android:name="com.test.TestActivity"
        android:launchMode="singleTask">
     <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <action android:name="android.intent.action.SEND_MULTIPLE" />

                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>
</activity>

这就是我在前台启动我的活动的方式:

Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, sharedText);
        sendIntent.setType("text/plain");
        activity.startActivity(Intent.createChooser(sendIntent, "Share"));

我正在测试它的 Android 版本是 5.1.1

【问题讨论】:

您的活动和清单的邮政编码 将此添加到您的活动标签中 android:launchMode="singleInstance" in maifest 提供MCVE。 @BhaveshRangani 因为这是一个公司项目,我可能无法共享代码,但这就是我在清单 Since it is a company project i may not be able to share the code?这是什么意思 ? Android 本身是开源的。Xd 【参考方案1】:

如果您想摆脱 Activity 的多个实例,请尝试使用 singleInstance

    <activity
        android:name=".MainActivity"
        android:launchMode="singleInstance">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

额外说明:

singleTask :- 将始终创建一个新任务,并将一个新实例作为根推送到该任务。但是,如果有任何活动 实例存在于任何任务中,系统将意图路由到该实例 活动实例通过 onNewIntent() 方法调用。在这种模式下, 活动实例可以推送到同一个任务。这个模式很有用 对于充当入口点的活动。

singleInstance:- 与 singleTask 相同,只是没有活动的实例可以被推送到 singleInstance 的同一个任务中。 因此,具有启动模式的活动始终处于单个 活动实例任务。这是一种非常专业的模式,应该 仅用于完全作为一个实现的应用程序 活动。

Copied from :https://***.com/a/36520016/3669559

【讨论】:

@ADM 为你添加了详细解释。 @OğuzhanDöngül 虽然 singleTask 应该可以正常工作,但我也尝试过 singleInstance 但没有帮助。 @OğuzhanDöngül :具有 singleTask launchMode 的 Activity 只允许在系统中有一个实例(又名 Singleton)。如果系统中存在Activity实例,则整个Task持有该实例将被移到顶部,而Intent将通过onNewIntent()方法传递。否则,将创建新的 Activity 并将其放置在适当的任务中。 无需在此处复制粘贴文档。 singleTasksingleInstace 几乎相同,只是有一个区别。 OP 的问题并不完整,因为我们不知道活动在运行时是如何启动的。 @OğuzhanDöngül 我已将代码 sn-p 添加到我原来的问题中。请看一下。【参考方案2】:

看来问题出在设备上。在模拟器和其他具有相同 android 版本的设备上 singleTask 工作正常。

【讨论】:

您在什么设备上进行测试?如果最初从安装程序或 IDE 启动,则存在一个长期存在的 Android 错误,该错误将创建应用程序的多个实例。要测试这是否是问题所在,您应该安装您的应用程序,然后强制停止该应用程序,然后像往常一样从主屏幕启动它。它现在应该可以正常运行了。 我测试的设备是 Kindle Fire 7。我一定会按照你的建议进行测试。

以上是关于singleTask 启动模式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

activity启动模式之singleTask

Activity以singleTask模式启动,intent传值的解决办法,singletaskintent

singleTask 的多个活动

android:Activity启动模式之singleTask

Android singleTask 还是 singleInstance 启动模式? [关闭]

Android中维护标准应用Activity回栈状态(使用singleTask启动模式)