问题标签 [launchmode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
11315 浏览

android - 我应该如何在 AndroidManifest.xml 中定义 launchMode - 使用 PhoneGap 和 JQM

我正在努力将我的应用程序限制为单个实例。目前,如果用户按下主屏幕退出应用程序,然后在外面做一些事情并再次点击应用程序的图标,它会启动应用程序的第二个实例。

这是我的完整清单文件:

它是一个单一的活动应用程序(基本上没有定义活动)。在 JQM 主页面上,我有类似以下条目的内容:

有人可以告诉我我的清单是否正确以及我是否应该使用

还是应该像其他东西一样

或者

提前致谢。

0 投票
2 回答
2896 浏览

android - 了解 android:launchMode

我对 Android 中不同的活动启动模式感到非常困惑。我知道它与活动堆栈有关,这对我来说也不是很清楚。我希望通过一个简单的用例对每个启动模式进行简短的解释。

0 投票
0 回答
227 浏览

android - 当应用程序在运行时被覆盖时,Android 应用程序启动行为发生了变化

应用程序启动行为让我很复杂!在我的应用程序在运行时被覆盖以升级后,重新启动行为出现问题。

通常,当我单击其图标以恢复时,它会显示上次运行的活动,因为它已被主页键停止。这符合我的预期,并且所有活动都在标准启动模式中调用。

那里没有问题,但问题就在这里。如果我在它仍在运行时运行相同的 apk 以重新安装或升级它,则应用程序始终以具有 android.intent.category.LAUNCHER 属性的活动 A 启动,直到我终止应用程序时才会显示最后一个活动 B任务管理器,然后重新启动。

我没有这种行为,我不确定当它被 Play 商店升级时会发生同样的问题。

满足我发现的情况的顺序如下

  1. 安装应用程序(应用程序应至少有 2 个活动,一个作为启动器,另一个用于移动)
  2. 使用应用程序图标启动应用程序
  3. LAUNCHER 活动 A 显示
  4. 转到活动 B
  5. 按主页键
  6. 再次使用应用程序图标启动应用程序
  7. 应用程序使用 Activity B <------------------------ 检查点启动!没关系。

  8. 按主页键

  9. 再次安装相同版本或更高版本的应用程序
  10. 使用应用程序图标启动应用程序
  11. 应用程序通过 Activity A 启动
  12. 转到活动 B
  13. 按主页键
  14. 使用应用程序图标启动应用程序
  15. 应用程序使用 Activity A <-------------------------- 检查点启动!有事吗。

  16. 杀死应用程序

  17. 使用应用程序图标启动应用程序
  18. 应用程序通过 Activity A 启动
  19. 转到活动 B
  20. 按主页键
  21. 使用应用程序图标启动应用程序
  22. 应用程序使用 Activity B <------------------------- 检查点启动!问题消失了。

我想我在这件事上遇到了更多问题,例如静态对象问题。所以请让我知道为什么会发生这种情况。

谢谢。

0 投票
0 回答
330 浏览

android - 为什么按下“主页”键时其他活动正在破坏。?

有两个活动ActivityAActivityB两个都是做的singleTask。这里ActivityB属于类别HOME,并且设置为始终。我从on启动ActivityA,它按预期启动ActivityA,但是当按下HOME KEY(即ActivityB)时,ActivityA被破坏。 可能的原因是什么?如何阻止ActivityA被破坏?通过保持这两种活动。BroadcastReceiverACTION_BOOT_COMPLETED
singleTask

这是广播接收器:

清单文件如下:

0 投票
2 回答
92 浏览

android - 标记为“SingleTask”的活动提前

我正在尝试围绕 Android 的 Activity 启动模式的不同选项(请参阅文档:Tasks and Back Stack

根据文档,启动标记为“singleTask”的活动时:

“......相反,要么为浏览器启动一个新任务,要么,如果浏览器已经在后台运行了一个任务,则该任务被提出来处理新的意图。”

根据描述 singleTask 的方式,要么创建一个新任务,要么,如果该活动已经存在于某个其他任务中,则该任务被提出。

如果浏览器活动的实例(例如)已经存在于我的应用活动的同一任务(堆栈)中(但不在前台),会发生什么?它是如何提出来的?这在文档中没有描述。

0 投票
1 回答
875 浏览

android - Android:具有多个意图过滤器的 SingleTop 行为

我正在努力解决 SingleTop 活动的以下奇怪行为。

我在该活动中定义了一些意图过滤器:

此代码应启动活动:

在 DashboardActivity 的 onResume 中,我检查了相应的操作:

但是当我运行这段代码时,我总是得到android.intent.action.MAIN动作。如果我删除singleTop启动模式,它会启动一个新活动,但会传递正确的意图。我必须使用相同的活动实例,所以singleTopsingleTask或者singleInstance必须完成这项工作。但我不知道这里出了什么问题。帮助!

0 投票
2 回答
131 浏览

android - android活动顺序,只需要当前活动的一个实例,而不是清除堆栈

单独的 singleTask 和 singleInstance 不是答案。

我在堆栈中有活动 ... n, n+1, n+2

n+2可以打开的元素n+1

这会创建堆栈

... n, n+1, n+2, n+1

我希望它创建堆栈

... n, n+2, n+1, wheren+1被移到栈顶

singleTask 创建这个堆栈

... n, n+1

和 singleInstance 创建这个堆栈

n+1以前的所有活动都已关闭。

我都不想要。

我可以使用任何启动模式吗?

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY只是使该活动不会从头开始再次加载,但不会清除历史记录中的重复活动,也许有我可以使用的标志组合?或者我可以在活动堆栈的索引中找到该活动,如果它不是最近的活动,则将其删除?

0 投票
1 回答
222 浏览

android - 从其他应用程序启动的android活动导致onResume时出现问题

我有两个活动,一个是MainActivity(启动活动),另一个是MaskActivity。如果我从其他应用程序启动我的应用程序,并从 MainActivity 启动 MaskActivity(现在 MaskActivity 在 MainActivity 之上),当我按下手机上的主页按钮并重新进入我的应用程序时会出现问题,一个新的 MainActivity 被启动并放在上面MaskActivity 和旧的 MainActivity,这不是我想要的。

但是,如果我从程序列表(而不是从其他应用程序)启动我的应用程序,事情就会如我所愿,当重新进入我的应用程序时,不会启动新的 MainActivity 并且 MaskActivity 位于 MainActivity 之上。

我的MainActivity 的launchMode 是“singleTop”,不知道是不是这个问题。只需将其更改为“singleInstance”,否则其他人无法解决问题。当更改为“SingleInstance”时,它不会启动新的 MainActivity,但会将 MainActivity 置于顶部。但是,如果在程序暂停之前 MaskActivity 位于 MainActivity 的顶部,我希望 MaskActivity 在程序恢复时保持在顶部。

有任何想法吗?

0 投票
2 回答
2684 浏览

android - SplashScreen 的 Acitivity SingleTask 行为

在我的应用程序中,我有:

-SplashScreen (SSc) 准备应用程序(启动服务等) -MainActivity (MA) 应用程序中处理大多数操作的最相关部分 - 以及一些其他不相关的活动

对于我的应用程序,我希望具有像 launchMode singleTask 这样的行为,以便我的应用程序始终作为新任务启动,即使通过 SMS/EMail 应用程序中的链接单击打开也是如此。最好只有一个我的活动实例,因为它们都是可连续导航的。

但是,当我将 SSc 作为 singleTask 启动时,它是堆栈的根目录并导航到 MainActivity,按 home,再次单击 Launcher 图标,应用程序将完全重新启动。所以 SSc 再次显示,依此类推。在这种情况下,我希望将 MainActivty 带到最前面。

我的愿望是:launcherclick -> SSc -> MA -> HOME -> launcherclick -> 将 MA 放在前面 -> HOME-> 从最近重新启动 -> 将 MA 放在前面

单击具有相同实例的链接-> SSc / MA(是否是首次启动)

在我的应用程序中,拥有多个实例是没有意义的,因为后台服务一次只处理一个 MainActivity,因为它经常轮询数据只是为了看到的“事物”。

您对实现这一目标有什么建议吗?

我的第一个想法是 LauncherActivity 与 launchMode singletask 没有布局来将意图路由到其他活动(很可能是 singleTop !?,因为它只在一个任务中),例如:

清单 xml:

0 投票
1 回答
2260 浏览

android - android 4.4.X:taskAffinity & launchmode 与 Activity 生命周期

我开发了一个简单的应用程序,它演示了我注意到的 Android 4.4.X 设备上的一些奇怪行为。

假设我想要有 2 个“主要”活动,其中第一个活动说“你好”(通过启动“HelloActivity”),它每第二次被恢复,第二个活动已经android:launchMode="singleTask" android:taskAffinity=".MyAffinity"定义。第二个是由第一个开始的。

我的代码

清单非常简单:

MainActivity在按钮单击时启动 AffinityTestActivity 并记录其生命周期。它还会在每秒钟恢复一次时启动 HelloActivity:

AffinityTestActivity在按钮单击时调用 finish() 并记录其生命周期:

HelloActivity实际上与 AffinityTestActivity 相同 - 它只有调用 finish() 和 printlns 的按钮来记录其生命周期。

测试场景

  1. 启动 MainActivity。
  2. 启动 AffinityTestActivity。
  3. 完成 AffinityTestActivity(当 AffinityTestActivity 完成时,MainActivity 恢复并且 HelloActivity 启动)。
  4. 分析输出。

日志

Android 4.4.2 和 4.4.3:(在 Nexus 7 II 和三星 Galaxy S5 上测试)如您所见,日志以 HelloActivity 的 onPause 结束,这没有意义(HelloActivity 在第 3 步中显示在顶部)。AffinityTestActivity 也不会被破坏, MainActivity 也不会暂停。

较旧的 Android 版本(<4.4.2,在 2.3.5.、4.1.2 和 4.2.1 设备上测试,4.0.3 模拟器)按预期工作 - 在 onResume 和 AffinityTestActivity 被销毁后,HelloActivity 不会暂停:

我的问题

  • 为什么我的 HelloActivity 在 Android 4.4.X 设备上启动并显示在顶部后立即暂停?
  • 我怎样才能避免它并强制应用程序具有“正常”的活动生命周期,就像旧的 Android 版本(<4.4.2)一样?

我开发的应用程序要复杂得多,并且适用于其活动的生命周期,这种行为违反了我的应用程序的功能。

非常感谢你!