launchMode 为 singleTask 的 Activity 的两个实例

Posted

技术标签:

【中文标题】launchMode 为 singleTask 的 Activity 的两个实例【英文标题】:Two instances of an Activity with launchMode as singleTask 【发布时间】:2020-03-26 17:58:02 【问题描述】:

我有一个使用 launchMode 作为 singleTask 的活动。但是由于某种原因,当我尝试在 "adb shell dumpsys activity activites" 中查找日志时,存在两个实例。第一个实例使用intent=act= flg=0x10000000 cmp= 启动,第二个实例使用以下意图intent= act= flg=0x10200000 cmp= (has extras) 启动。它是什么旗子?

实际上第二个意图是由不同的应用程序启动的。如何防止该应用启动我的活动的新实例。

【问题讨论】:

有些地方不太对劲。您是如何首次启动您的应用程序的?通过应用程序图标从主屏幕?或来自 android Studio 或安装程序?您可能会看到一个非常讨厌的长期 Android 错误。 两个实例是否在同一个任务中?还是他们在不同的任务中?你能粘贴adb shell dumpsys activity activities的全部相关输出吗? 我意识到这个问题已经 5 个月大了。你有没有解决它? 【参考方案1】:

它是什么标志 - 0x10200000 ?

回答-https://***.com/a/29875943/4694013

【讨论】:

0x10000000 对应于 FLAG_ACTIVITY_NEW_TASK。 0x10200000对应什么? 正如您在共享的图像中看到的那样,提到 singleTask 和 singleInstance 不会启动多个实例,即使它们来自不同的进程。 这是错误的。这些特殊启动模式的全部意义在于防止多个实例,尤其是从多个任务启动时。

以上是关于launchMode 为 singleTask 的 Activity 的两个实例的主要内容,如果未能解决你的问题,请参考以下文章

onActivityResult 与 launchMode="singleTask"?

launchMode="singleTask" 不创建新任务

设置 launchMode="singleTask" 与设置活动 launchMode="singleTop"

关于singleTask (LaunchMode随笔)

launchmode =“singletask”的xml等效标志

始终重新创建具有 launchMode singleTop 或 singleTask 的 Activity