【问题标题】:NSTimer, NSUrlConnection, NSThread behavior when application is in background state应用程序处于后台状态时的 NSTimer、NSUrlConnection、NSThread 行为
【发布时间】:2026-01-09 10:30:01
【问题描述】:

团队,

我正在开发一个 iOS 应用程序。 我的要求是定期查询特定的新闻服务(REST API)。我想每天查询两次服务并更新我的 sqllite 数据库,即使应用程序处于后台状态。当应用程序处于前台时,我的 UI 将使用从 sqllite db 获取的数据进行更新。

我的问题是,

  1. 是否可以在后台连续运行 NSTimer?如果是,是 计时器在后台运行有任何最大时间限制(比如 10 分钟或 60 分钟)?

  2. 是否可以发送请求以使用 NSUrlConnection 并将文件保存到文档目录,当 应用程序在后台?

您的建议将对我的项目设计大有帮助。 提前致谢。

【问题讨论】:

  • 你抄袭别人的邮件了吗??

标签: ios4 nsurlconnection nstimer multitasking


【解决方案1】:

您的目标在 iOS 上无法实现:

任意应用程序无法在后台运行任意时间。

您可以尝试通过使用本地通知而不是 NSTimer 来安排更新来缓解其中的一些问题。但是,这只会为您争取到非常有限的时间来建立网络。

此时您应该问自己的问题可能是:
如果您每天只更新两次,那么当您的应用处于活动状态时启动下载会有多糟糕?

【讨论】:

  • 感谢您的 cmets,当应用程序在下载过程中进入后台时,我想至少完成当前正在进行的下载。
【解决方案2】:

回答我自己的问题,以便对其他人有所帮助。

问题一:NSTimer 是否可以在后台连续运行?

Ans: Nstimer 不会在应用程序处于后台状态时运行。所以在后台没有最大允许定时器值的点。如果应用程序在正在进行的过程中进入后台,则可以使用 [UIApplication beginBackgroundTaskWithExpirationHandler:] 来完成正在进行的过程。操作系统允许使用此处理程序的最长时间为 10 分钟。

问题 2:当应用程序在后台时,是否可以使用 NSUrlConnection 发送请求下载文件并将文件保存到文档目录?

回答: 下面给出的信息来自 Apple 文档。详情见here

在 iOS 中,只允许特定的应用类型在后台运行:

  • 在后台向用户播放有声内容的应用,例如音乐播放器应用
  • 让用户随时了解其位置的应用程序,例如导航应用程序
  • 支持互联网协议语音 (VoIP) 的应用
  • 需要下载和处理新内容的报亭应用
  • 从外部附件接收定期更新的应用

有关使用VOiP类型应用程序运行后台进程的信息可以找到here

【讨论】:

    最近更新 更多