【问题标题】:TTimer not working while iOS app in backgroundiOS 应用程序在后台时 TTimer 不工作
【发布时间】:2016-01-14 00:02:24
【问题描述】:

我有一个应用需要基于 TTimer 执行一些操作。

当应用变为非活动状态(在后台)时,计时器停止工作。

我找不到任何与 UIBackgroundModes 相关的选项。

如何让计时器一直运行?

【问题讨论】:

  • 应用程序在进入后台后不久暂停。您可以让您的应用程序在后台运行,但它仍然只有在用户允许应用程序在后台运行时才有效。只需了解如何使用 Xcode/ObjectiveC 执行此操作,然后您就可以将其转换为在您的 Delphi 应用程序中使用。

标签: firemonkey delphi-10-seattle


【解决方案1】:

iOS 会在您的应用进入后台后不久自动暂停。您需要让 iOS 知道您将继续在后台运行。

项目>选项>Version Info中,您可以将需要在后台继续运行的服务的字符串值添加到数组键UIBackgroundModes。这将添加到您在 iOS 上的项目的 info.plist

您可以咨询Apple's documentation,了解这些值的作用。 . .

  • 价值 - 描述
  • 音频 - 应用在 背景。
  • 位置 - 该应用程序提供基于位置的信息,以 用户并需要使用标准位置服务(如 反对显着改变位置服务)来实现这一点 特征。
  • voip - 该应用程序提供 IP 语音服务。具有此功能的应用 键在系统启动后自动启动,以便应用程序可以 重新建立 VoIP 服务。具有此密钥的应用程序也可以 播放背景音频。
  • fetch - 应用需要来自 定期联网。在方便时, 系统在后台启动或恢复应用程序并为其提供 下载任何新内容的时间很少。这个值是 在 iOS 7.0 及更高版本中受支持。
  • remote-notification - 应用使用 远程通知作为有新内容可用的信号 下载。当远程通知到达时,系统启动 或在后台恢复应用程序并为其提供少量 是时候下载新内容了。 iOS 7.0 支持此值 然后。
  • newsstand-content - 应用处理的内容是 最近使用 Newsstand Kit 在后台下载 框架,以便在用户需要时准备好内容。这 iOS 5.0 及更高版本支持 value。
  • external-accessory - 应用 与定期传输数据的附件通信 间隔。 iOS 5.0 及更高版本支持此值。
  • bluetooth-central - 该应用使用 CoreBluetooth 框架 在后台与蓝牙配件通信。这 iOS 5.0 及更高版本支持 value。
  • 蓝牙外设 - 应用 使用CoreBluetooth框架以外设模式进行通信 带蓝牙配件。系统会提醒用户注意 具有此密钥集的应用程序的潜在隐私影响。查看最佳 维护用户隐私的实践以获取更多信息 隐私。 iOS 6.0 及更高版本支持此值。

请注意,您需要实际选择与您正在执行的操作相匹配的模式。当您实际上所做的只是后台处理时,您不能只选择 fetch

【讨论】:

  • 感谢您的回答,但正如我所提到的,UIBackgroundModes 值似乎都不相关。我需要那个计时器来继续运行。
  • @DanielH 不幸的是,这些是 Apple 提供的唯一选项。这是平台的限制。我以为你的意思是你找不到任何设置 UIBackgroundMode 的选项,这就是我解释如何设置它们的原因。
  • @Tim - 换句话说,没有办法让计时器在后台模式下运行。为了测试,我检查了位置服务是否使用 TLocationSensor 在后台运行并将 UIBackgroundModes 选项设置为“位置”,但它也不起作用。
  • @DanielH 你的计时器在做什么?你怎么知道它是否正在运行?操作系统仍然在后台管理它。例如,获取模式意味着您的应用只是偶尔被唤醒以获取数据。
  • @Tim 计时器应该终止连接,发生的情况是只有当应用程序再次激活时才会触发 OnTimer。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多