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

android - 如何在 Android "L" 上获取最近的任务?

背景

我的应用程序允许按最近启动的时间对应用程序列表进行排序。

问题

从 Android "L" 开始,函数getRecentTasks将只返回当前应用程序已启动的应用程序列表,如文档中所述:

如果您的应用使用 ActivityManager.getRecentTasks()...

随着在即将发布的版本中引入新的并发文档和活动任务功能(请参阅下面最近屏幕中的并发文档和活动),现在不推荐使用 ActivityManager.getRecentTasks() 方法以改善用户隐私。为了向后兼容,此方法仍然返回其数据的一小部分,包括调用应用程序自己的任务和可能的其他一些非敏感任务(例如 Home)。如果您的应用正在使用此方法来检索自己的任务,请使用 android.app.ActivityManager.getAppTasks() 来检索该信息。

使用 ADT 显示此功能的文档时也是如此(目前在 Internet 上不可用):

此方法已弃用。从 L 开始,第三方应用程序不再可以使用此方法:因为引入以文档为中心的最近消息意味着它可能会将个人信息泄露给调用者。为了向后兼容,它仍将返回其数据的一小部分:至少是调用者自己的任务(尽管请参阅 getAppTasks() 以了解获取该信息的正确支持方式),以及可能已知的其他一些任务,例如 home不要敏感。

我不明白为什么要采取这种行为,因为很容易看到用户拥有哪些应用程序,即使没有任何许可。

问题是,这是我添加的这个功能的一个很大的限制,所以我希望有办法克服这个问题。

我试过的

目前,我只对最近启动了哪些应用程序使用了启发式方法——我得到了正在运行的进程列表。

我也可以使用流程的重要性值,也许还有“importanceReasonComponent”,但这只是所有的启发式和猜测......

问题

有没有办法克服这个限制?有什么我没有想到的解决方法吗?

也许它是可能的根?还是忙箱?

0 投票
1 回答
1928 浏览

android - Android:后退按钮的默认操作

我知道当我们按下后退按钮时,onBackPressed()会调用默认函数。

http://developer.android.com/reference/android/app/Activity.html#onBackPressed()

该文档说“默认实现只是完成当前活动”。这是什么意思,是否意味着默认的 onBackPressed() 包含该功能finish()

finish() 内部的实现是什么?是onDestroy()吗?

0 投票
1 回答
120 浏览

android - 当后台进程限制为 1 时,Android 驱逐任务历史记录

设想:

我的应用程序执行以下操作:

  • 显示一个按钮
  • 当我单击按钮时,我的任务中的不同应用程序会显示一个新活动。

我希望如果我在该新活动中单击返回,我会返回到我的应用程序。这发生在标准操作下。

但是,如果我将“后台进程限制”设置为“1 个进程”,这将停止工作;回击只是返回到任务启动器。Android 不会尝试在我的任务堆栈中重新创建(被破坏的)活动。(他们的 onCreate 方法永远不会被调用)

我尝试将 android:alwaysRetainTaskState="true" 放在根活动中(以及用户与之交互的每个活动中),但这种看似不正确的行为仍然存在。

这是Android中的故意行为吗?现实世界中的用户会遇到我的应用程序以这种方式运行吗?

0 投票
2 回答
4113 浏览

android - Android:如何让 allowTaskReparenting="true" 工作

我正在编写一个可以通过接收带有 ACTION_VIEW 或 ACTION_EDIT 的意图从另一个应用程序启动的应用程序。例如,可以通过查看电子邮件附件来打开它。麻烦的是,当您单击主页按钮并再次单击您正在使用的电子邮件应用程序的启动图标时,我的活动被终止,并且已进行的任何用户编辑都将丢失。我想要发生的是,当用户单击主页按钮时,我的活动被重新设置为父项,以便当用户单击我的应用程序的启动图标时它会恢复。我尝试在 manifest.xml 中设置 android:allowTaskReparenting="true" 但这不起作用。有时它根本没有任何效果,有时活动被移动到我的启动图标,但当您再次单击电子邮件应用程序图标时仍然会被杀死。allowTaskReparenting 的文档真的很模糊。它说该属性意味着:

“Activity 是否可以从启动它的任务转移到与其有关联的任务。”</p>

这个词在这里是什么意思?我想要的是保证活动确实移动(并保持在那里)。有什么办法可以做到这一点?

提前感谢任何可以提供帮助的人。

编辑

为了回应下面的评论,我整理了一个婴儿版本来展示我遇到的问题。当您通过单击另一个应用程序中的文件(例如,电子邮件的附件)启动 EditFileActivity 时,您可以编辑该文件。但是单击主页图标,然后再次单击电子邮件应用程序图标会导致您对文件所做的更改丢失。我希望 android 系统仅在用户明确单击返回然后说“是”或“否”时才忘记 EditFileActivity 的实例。理想情况下,我希望 EditFileActivity 的所有实例都堆积在我的应用程序的启动图标上。我可以通过使用 singleTask 或 singleInstance 并编写某种活动来显示选项卡中所有打开的文件来实现类似的东西,但如果我能让 android 系统本身帮助我,那就容易多了。

这是一个演示问题的完整项目。

启动活动:

编辑文件活动:

2014 年 10 月 12 日更新

遇到的问题是由于使用了 Intent 标志 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET。幸运的是,从 API 级别 21 开始,Google 已弃用此标志。

0 投票
1 回答
87 浏览

android - 尝试理解 Android 任务

我正在尝试了解 android 任务。假设您从其启动图标启动一个活动 X,并从该活动启动一个来自不同应用程序的新活动 Y。您有一个由活动 X 和 Y 组成的任务。现在假设您按下主页按钮并再次单击 X 的启动图标。android 文档说,默认情况下,系统应该像以前一样显示任务,并在顶部显示 Y。

但是,通过在真实设备上进行一些实验,您会发现这并不是很多时候发生的事情。假设 X 是一个电子邮件应用程序,并且您在不同的应用程序 Y 中查看电子邮件中的任何内容(例如在图库中打开照片、在 Quickoffice 中打开 PDF 文档、在 Chrome 中打开网页等),您会发现如果单击home,然后是 X 的启动图标,你实际上又看到了 X。有时显示内容的活动被移动到不同的启动图标,但据我所知,它通常被 Android 系统完全遗忘。

如果 X 是 GMail、Yahoo Mail 或 Google Drive,就会发生这种情况。

我的问题是是什么导致 Y 被甩掉了任务?是 X 做的事情还是 Y 做的事情?如果这是 X 所做的事情,作为 Y 的开发人员,您能做些什么来防范它并阻止您的活动被 android 系统遗忘?谢谢

0 投票
2 回答
7115 浏览

android - 当您单击应用程序的启动图标时会发生什么?

 当您单击应用程序的启动图标时会发生什么?

  1. 是否总是发送新的意图,或者结果有时与从最近的任务中恢复任务相同?

  2. 如果发送了一个意图,它什么时候被发送到一个新活动实例的 onCreate() 方法,什么时候通过一个现有活动的 onNewIntent() 方法被路由?

  3. 假设意图通过任务中现有活动的 onNewIntent() 进行路由。它被发送到哪个活动?离顶部最近的还是离根最近的?它总是会被发送到应用程序启动活动的实例,还是有时会被发送到与根具有相同亲和力的活动?它可以被发送到与根不具有相同亲和力的活动吗?

  4. 最后,这一切如何受到任务中活动的各种启动模式(标准、单顶、单实例、单任务)的影响?

如果有人了解这一切,请帮助我!

0 投票
1 回答
239 浏览

android - Android Activity 的启动模式

假设我有一个任务,我A, B & C Activities分别有。然后我开始一个新的活动 D,它的启动模式是单实例。

现在,我想知道任务级别会发生什么?是否会保留相同的任务但仅包含Activity D或创建新任务?

0 投票
2 回答
668 浏览

android - Android:按home后恢复应用程序时,应用程序始终从根Activity启动

我的游戏用例看起来是这样的:我有一个 LoadingActivity,它加载(通过 AsyncTask,但这无关紧要)并将游戏所需的所有图形存储在一个静态类中。加载完成后,出现MenuActivity。从这个活动中,我可以启动其他活动,如 LikeBeginActivity。

这是清单的片段:

调用如下所示:

加载活动

菜单活动

烦人的问题是,当我在LevelbeginActivity中按HOME,通过launcher继续游戏时,总是从LoadingActivity开始,但为什么整个任务都清空了呢?这对我来说没有意义。然后我想添加

到清单中的 LoadingActivity,但这也无济于事。为什么它又开始了整个任务?这是非常有问题的,因为如果一遍又一遍地启动 LoadingActivity,我的内存就会耗尽。(下一个问题将是后退按钮的行为,但这是另一个问题)。我可以通过将最后一个 Activity 名称保存为 SharedPreferences 或其他东西来修补一些丑陋的加载行为,但我更喜欢一个干净的解决方案。

0 投票
3 回答
1170 浏览

android - Android 将参数传递给 TimerTask 扩展类

在我的应用程序中,我需要将参数传递给 TimerTask 以供使用Context。但我做不到。在下面的代码GetSMSThread类中subclass,需要从主类获取参数。

GetSMSThread子类:

0 投票
1 回答
35 浏览

android - 重启 TimerTask 失败

我正在编写简单的代码来启动和停止TimerTask。在这段代码Stop中可以工作,但我无法重新启动TimerTask。请帮我解决这个问题。

我的代码: