问题标签 [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 投票
1 回答
1068 浏览

android - android singleTask 活动不作为根?

我一直在阅读有关启动模式的文档,但有一件事我不明白。该文档说 singleTask 活动始终是堆栈的根:

相反,“singleTask”和“singleInstance”活动只能开始一个任务。它们始终位于活动堆栈的根部。此外,设备一次只能保存一个活动实例——只有一个这样的任务。

但是:如果您查看图 4中的部分文档,您会看到当 Activity 2 启动 Activity Y(将该任务置于前台)时,Activity Y 已经在任务的顶部,并且将在当前的顶部任务,而不是根。

我在这个模拟应用程序中尝试了这个场景,当我创建 singleTask 活动时,它总是会创建一个新任务。但是,如果唯一的实例已经存在,它会完成高于该实例的所有活动,因此唯一的实例可以是根(也是任务中的唯一活动)。

Activity Y 怎么会在 Activity X 之上的任务之上呢?

我失踪还有其他原因吗?

PS:我也不太了解Task和back stack之间的区别。

0 投票
0 回答
304 浏览

android - 关闭包含单实例活动的 Android 应用程序

我开发了一个安卓应用程序。根据要求,所有活动中的数据只能从服务器获取一次,并且活动状态应保存,因此当用户离开该屏幕并再次登陆该活动时,它将再次看到与离开时相同的预览。我通过 Activity 标签中的以下属性实现了这一点。

android:launchMode="singleInstance"
android:alwaysRetainTaskState="true"

现在的问题是每个活动都在创建它的实例。当用户按下后退按钮时,我希望用户退出应用程序。我正在用主页按钮覆盖我的后退按钮。这是我正在使用的代码。

但是,当用户再次单击应用程序图标时,应用程序会从预览的屏幕再次打开,而不是从启动屏幕开始。就我而言,关闭应用程序并重新启动活动的最佳解决方案是什么。请帮我。我需要帮助。提前致谢。

0 投票
1 回答
1308 浏览

android - 活动流程:点击我的应用程序图标将 onCreate MainActivity

在我的应用程序中,我从 MainActivity 导航到 Activity B。然后按 HOME 按钮,然后再次单击应用程序图标以最大化它。

它不是 onResuming 我的 Activity B,而是回到 MainActivity。

这是有道理的,因为在我的 AndroidManifest.xml 中,当您单击其图标时,我使用普通的意图过滤器来启动 MainActivity:

我正在检查像 facebook 和 twitter 这样的流行应用程序,它们似乎都没有遇到这个问题 - 当您从 facebook 提要导航到朋友页面然后按 HOME 按钮时。然后您再次单击应用程序图标,它仍然在您朋友的页面上。

当我单击应用程序图标时,这似乎只会影响应用程序。例如,如果从 MainActivity 转到 Activity B,按 HOME 按钮,然后按 SQUARE 按钮以显示我在后台运行的所有应用程序,选择我在后台的应用程序再次最大化它,应用程序将正确返回到 Activity B.

我如何确保当您单击应用程序图标时,它是onResumesActivity B?

0 投票
0 回答
474 浏览

java - Android:Recents 任务列表,android:excludeFromRecents="true" 行为与 android:launchMode="singleTop"

基本上我不想在最近的应用程序中显示我的应用程序活动任务。我的应用程序中只有一个活动。

这是我的活动详情:

http://developer.android.com/guide/components/recents.html#removing

设备:Nexus 5X
安卓版本:6.0.1

场景一:

1)点击应用程序。

2)按主页按钮。

3)点击最近列表/概览屏幕。

4)应用程序未列在最近列表中。

场景二:

1)点击应用程序。

2)点击最近列表/概览屏幕。

3)最近列表中列出的应用程序。

什么原因?以下这些属性与它有关吗?

谢谢

尼廷

0 投票
3 回答
8348 浏览

android - Android Activity 启动模式和深度链接问题

我的应用有 2 个活动。应用程序的根活动是 MainActivity。如果凭据丢失或无效,用户将在完成 MainActivity 时被重定向到 LoginActivity。

如果我将主要活动的启动模式设置为 singleTask 并且我在 LoginActivity 的内部片段 => 最小化应用程序 -> 从启动器图标启动应用程序 => MainActivity 启动(因为它是一个 singleTask 活动)和重定向到 LoginActivity 但当然是堆栈中的第一个片段。

想要的行为(就像从最近重新启动时发生的那样)是它将保留当前活动的实例并在 LoginActivity 的堆栈中显示正确的片段。

这当然可以通过将启动模式设置为 singleTop 来轻松解决,但随后会发生不同的问题!DeepLink 麻烦!

如果我的应用程序在后台打开,并且我在 singleTop 模式下单击浏览器或电子邮件中的链接 - 该应用程序将作为转发应用程序的子任务打开(如果您单击最近,您将看到您的应用程序打开了两次 - 一次作为以前存在的常规实例,并且包含在浏览器/电子邮件中)。这当然非常不方便,可以通过 - 你知道 - 将启动模式设置为 singleTask 来解决!

对此问题的任何帮助将不胜感激。

0 投票
0 回答
43 浏览

android - 使用立即调用的片段从 Activity 获取结果

我有Fragment A in Activity A。当我开始一个新的Activity B使用startActivityForResultfrom Fragment AonActivityResultActivity B 刚开始时立即调用。使用onActivityResult得到的结果代码在中 正确Fragment但在中显示错误Activity A

我认为问题是由于某些启动模式造成的。我

和活动 B

我只是想使用片段中的 startActivityForResult 打开一个 Activity 并在选择微调器项目时从中获取结果。

0 投票
2 回答
3919 浏览

android - Up Navigation 和 singleTop 启动模式

我有一个活动 A,当我按下工具栏项时,它使用 startActivity(intent) 启动活动 B。每当我按下后退按钮或向上导航图标时,它都会关闭我的应用程序。我相信这是因为我在我的父活动中使用了 launchMode="singleTop" (我使用它是因为我有一个搜索视图和一个可搜索的配置,因为我不想在搜索上启动我的活动的另一个实例)。所以问题是:如何在不关闭我的应用程序的情况下使用向上导航和返回按钮从子活动(B)返回到父活动(A)?我已经搜索过了,我发现了一些关于 onNewIntent() 的信息。如果这是我的解决方案,我应该如何正确使用它?


这是我的清单文件:


以下是如何开始我的新活动:

0 投票
1 回答
387 浏览

android - 如何防止在按下后退按钮时重新创建单个任务活动?

我有一个简单的启动器应用程序,它不启动任何应用程序,只显示一个 WebView。它被设置为默认启动器。我没有在这台平板电脑上使用任何其他应用程序。当我重新启动平板电脑时,此启动器按预期启动。我的问题是,如果我按下设备的后退按钮,该活动将被销毁,并再次创建为新活动。我不明白这种行为有什么意义,因为活动已经可见......视图的启动模式是 singleTask,所以我希望它只是停留在原处,而不是重新创建。如何才能做到这一点?据我了解文档,这应该按我的预期工作,而不是现在的方式。

系统在新任务的根部创建活动并将意图路由到它。但是,如果活动的实例已经存在,系统会通过调用其 onNewIntent() 方法将意图路由到现有实例,而不是创建一个新实例。 http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

0 投票
3 回答
6906 浏览

android - 在整个应用程序中只保留每个活动的一个实例

我想为我在应用程序中启动的每个实例保留一个实例。ActivitylaunchModesingleTask是一个选项,但它仅适用于一个Activity.

我想

  • Activity如果没有实例并调用它,则启动一个。
  • 如果它的任何其他实例Activity已经存在,那么该实例将被带到前面而不创建该的新实例Activity
  • 此属性将应用于多个Activity.
  • Activity保证它总是在历史堆栈的顶部。

我到目前为止的工作:

我收到了许多对我的案例无效的建议,所以我想指出这些,以免其他人给出相同的建议。

  • 我已将 to 设置为launchModesingleTop并且仅当Activity它位于历史堆栈的顶部时才有效。onNewIntent()Activity仅在位于历史堆栈顶部时才被调用。在我的情况下,Activity可能在堆栈中的任何位置。所以这是行不通的。
0 投票
1 回答
231 浏览

android - 奇怪的 singleTask 行为

我知道 launchMode:"singleTask" 的意思是,如果之前已经创建了一个活动,并且在将来被要求显示,Android 将简单地显示旧的,而不是创建一个新的实例。我面临的问题可以用一个例子来说明:-

假设我们启用了两个活动
A活动
B (带有 launchMode ="singleTask" 的活动)(这就是其清单声明中的全部内容)

现在,如果 A 创建了一个对应于 B (A->B) 的 Intent ,则 A 将完成并从活动堆栈中删除。我怎样才能防止这种情况发生。我想要的是,当 A 调用 B(创建意图)时,返回 B 的前一个实例,并且 A 保持原样并且没有被破坏。感谢您的帮助 。任何帮助表示赞赏

编辑