问题标签 [android-task]

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 投票
3 回答
236 浏览

android - Android - 当 Activity 设置为 Single Top 时无法检索 Intent

我正在开发一个具有以下场景的应用程序:

我通过 s 在每个值之间传递我的值ActivityIntent它可以工作,但是当我回到ActivityA 时,似乎所有值都被清除了。

来自ActivityC 的代码:

当我尝试获取这些值时,它们都是null.

编辑:

这是和的onCreate()代码onNewIntent()

0 投票
0 回答
548 浏览

android - 显示最近的应用程序列表 - getRecentTasks、AccessibilityService 或 UsageStatsManager

我应该更喜欢什么方法?我希望我的解决方案可以在 android 4.2 以上版本上运行,也可以在 L 和 M 上运行。

  • getRecentTasks - 不再适用于 android L...

  • AccessibilityService - 我自己监控活动的应用程序,因此我可以始终显示最近的应用程序列表,而无需查询任何 android 资源。

  • UsageStatsManager - 我每次需要信息时都会查询经理,这样我就可以显示最近的应用程序

问题

  • 哪种方法比另一种更好?特别是关于能源消耗?我不希望我的应用程序消耗更多的电量...
  • 有谁知道替代解决方案?甚至更好的?

目前我决定使用AccessibilityService,正如我所读的那样,UsageStatsManager如果我查询很长一段时间并且我的应用程序总是会查询总的运行时间段,那么它可能会很慢......

0 投票
0 回答
53 浏览

android - 任务恢复时是否会重启非粘性服务?

如果一个任务在后台被销毁,后来又恢复了活动栈,那么该任务最初启动的服务是否也恢复了?更具体地说,即使他们onStartCommand(...)返回,他们是否会在这种情况下重新启动START_NOT_STICKY

我问是因为设置android:alwaysRetainTaskState为 false并不能保证不会保留任务状态。我担心如果我的任务被杀死并恢复,最重要的活动可能是依赖于由启动器活动有条件地启动的服务的活动。我考虑了关于这个问题和另一个问题的解决方案。但是后来我突然想到,如果服务会自动重启,我就不用担心了。(而且服务正在运行的事实可能有助于保持应用程序的运行,所以如果它完全是一个问题,这可能是一个极端的情况。)

我想避免START_STICKY,因为它会导致服务在被杀死后几秒钟内重新启动而没有任务。(至少,当应用程序从最近刷卡时会发生这种情况。)在任务恢复之前不应重新启动它们。

0 投票
1 回答
1430 浏览

android - Android Activity 错误地重新设置为应用程序任务

我有一个应用程序,它对大多数活动具有通常的任务行为,但它也有一个活动需要启动到创建它的任务上。

此活动是从 mime 类型启动的。如果另一个应用程序启动该活动,则该活动应显示在同一任务中。但是,活动总是重新分配给其应用程序的任务。尽管明确设置allowTaskReparentingfalse.

当应用程序中没有其他活动时,活动会在启动它的任务中正确启动。只有当应用程序的其他活动存在于任务中时,它才会重新父级。

如何让活动仅在其启动的活动之上启动,与同一应用程序的其他活动分开?这是 AndroidManifest.xml 的相关部分:

0 投票
1 回答
765 浏览

android - Android - 需要任务关联、单任务启动模式和任务重父化

我试图了解 Android 中对任务关联性的需求。我也搜索了其他 SO 答案。

我对单任务启动模式和任务亲和性的组合特别感兴趣。

对于 singleTask 启动模式(或带有 NEW_TASK 标志的 Intent),系统会采取 3 个操作之一:

  1. 如果活动存在,它将恢复它
  2. 如果活动不存在,它将寻找具有匹配亲和力的任务来添加活动
  3. 如果没有找到匹配的任务,系统将创建一个以该活动为根的新任务

我从这个答案中理解了第一个案例的必要性。它讨论了在多个状态下拥有相同的活动,以及它如何在用户体验中产生不一致的问题。

我比较疑惑的是第二种情况——系统为什么要找一个已有的具有相同亲和力的任务?如果不允许此功能,这会满足什么样的用例并且会中断?为什么有必要?

从这个链接

同样的链接也谈到task reparenting. 这是我无法理解的另一个功能。该链接确实提供了一个天气/旅行应用程序的示例:

我对这个功能的问题是相似的。我无法判断此功能是满足一些必要的用户体验要求还是只是任务的一个花哨的附加组件?为什么需要跨任务重新设置活动?

有人可以帮我回答以上两个问题吗?

0 投票
4 回答
3548 浏览

android - android:launchMode 和 android:documentLaunchMode 属性有什么区别?

所以我一直在阅读关于任务、返回堆栈和概览屏幕的文档,有一件事让我非常困惑。在这里阅读后:http launchMode: //developer.android.com/guide/components/tasks-and-back-stack.html然后在documentLaunchMode这里:http: //developer.android.com/guide/components/recents.html我无法分辨它们有何不同!

两者都被描述为提供方法来控制相对于当前任务(启动活动的任务)的任务中新活动的启动。那么这两种模式有什么不同呢?-document的附加意味着什么?

以下是直接引用它们在清单文件中使用的文档:
LaunchMode: http: //developer.android.com/guide/topics/manifest/activity-element.html#lmode
DocumentLaunchMode:http: //developer.android。 com/guide/topics/manifest/activity-element.html#dlmode

0 投票
2 回答
636 浏览

android - 如何以当前状态恢复现有任务

我的应用程序有两个活动 A 和 B。A 是任务的根,是从启动图标启动的任务。B可以从A开始。

除了从启动图标启动 A 外,还可以通过单击另一个应用程序中的文件来启动 A,例如单击电子邮件附件或 Drive 中的文件。我通过向清单文件中的意图过滤器添加操作和类别来完成此操作。

我想让它当 A 从另一个应用程序启动时,而不是创建一个新任务,我希望现有任务恢复到它之前的相同状态。这可以是活动 A 或 B,无论用户在按下 Home 键之前碰巧在哪里。

我尝试了各种启动模式和意图标志,但似乎没有任何效果。

0 投票
0 回答
109 浏览

android - appContext.startActivity - 这是个好主意吗?

有人告诉我,从应用程序上下文启动活动是个坏主意,您应该尽可能使用活动上下文。

因此,我阅读了有关任务的 Google 文章:Tasks and Back Stack
它表示每个堆栈都有它的taskAffinity id,如果新活动将与属于已经运行的任务的taskAffinity id 一起午餐,那么它将被放置在该任务中(如果午餐模式是默认模式或单顶模式)。

因此,如果您没有为您的活动声明taskAffinity id,那么您是从应用程序上下文还是活动上下文午餐您的活动都没有关系。

但是再一次,我被告知使用应用程序上下文启动新活动是一种不好的做法。所以请告诉我,为什么会这样?我是否遗漏了需要注意的重要案例?

0 投票
1 回答
466 浏览

android - PendingIntent 完成当前的第 3 方活动以及开始它的相应活动

我的应用程序将 PendingIntent(调用我自己的 Activity)传递给第 3 方应用程序,并在该第 3 方应用程序中启动 Activity。

在某个时候,第 3 方应用程序启动了 PendingIntent(在某些按钮单击时),但它没有完成自己的 Activity。

我想知道是否有一种方法(可能使用 Intent 标志或 TaskStackBuilder)来构建 PendingIntent 以使第 3 方 Activity 将自动完成?

0 投票
2 回答
2474 浏览

android - launchMode="singleTask" 不创建新任务

我有2个活动:活动A和活动B。活动A的启动模式是标准的,活动B的启动模式是singleTask。

我启动应用程序,启动器 Activity A 启动。然后我按主页按钮并返回手机的主屏幕。然后我启动浏览器应用程序并输入以下内容:

打开活动 B。系统导航到我的应用程序并在活动 A 之上启动活动 B。此时如果我按下后退按钮,活动 B 会弹出,我会看到活动 A。

这不是我所期望的,因为 android 文档指出:

对于 singleTask 活动,系统会创建一个新任务并在新任务的根部实例化该活动。但是,如果活动的实例已经存在于单独的任务中,系统将通过调用其 onNewIntent() 方法将意图路由到现有实例,而不是创建新实例。一次只能存在一个活动实例。

我从这些句子中了解到的是,在我的情况下,由于 Activity B 的实例不存在,因此应该启动一个新任务,并且它的堆栈中应该只有 Activity B(我的应用程序的另一个实例应该仍然存在于单独的任务,它的堆栈中应该有 Activity A)。然后,如果我在 Activity B 时按回,因为它是 backstack 中唯一的 Activity,它会弹出并且系统返回到浏览器。

为什么不是这样?android 系统如何知道我的应用程序已打开并导航到它并在现有应用程序堆栈之上启动活动 B,而不是启动我的应用程序的另一个实例并让我的应用程序的两个实例拥有自己的堆栈?在新任务中实例化活动是什么意思?谁能解释一下?

谢谢。