iPad 应用程序在锁定屏幕后变为非活动状态

Posted

技术标签:

【中文标题】iPad 应用程序在锁定屏幕后变为非活动状态【英文标题】:iPad app become inactive after locking screen 【发布时间】:2012-05-08 06:30:49 【问题描述】:

在我的应用程序中,我在某个时间点使用NSOperation 在单独的线程上下载和上传数据。这两个过程大约需要。 2-3 分钟。如果应用程序保持活动状态,那么一切正常。但是,如果 iPad 屏幕被锁定(自动或手动),应用程序将变为非活动状态,下载/上传会暂停,并且在一段时间后屏幕解锁时进程失败并出现超时错误。

我在 plist 文件中有“所需背景模式”的“应用程序播放音频”。屏幕锁定时是否需要设置任何其他标志来运行应用程序?

请帮我看看出了什么问题。

【问题讨论】:

【参考方案1】:

当屏幕锁定时,您的应用将变为非活动状态。根据 ios 应用程序编程指南中的 "Responding to Interruptions":

按下睡眠/唤醒按钮是另一种类型的中断,它会导致您的应用暂时停用。当用户按下此按钮时,系统禁用触摸事件,将应用移至后台,但将应用的 applicationState 属性的值设置为UIApplicationStateInactive(而不是UIApplicationStateBackground),最后锁定屏幕。

您可以根据同一指南中的"Executing a Finite-Length Task in the Background" 获得额外的后台任务时间:

正在过渡到后台的应用可能会请求额外的时间来完成任何重要的最后一分钟任务。要请求后台执行时间,请调用UIApplication 类的beginBackgroundTaskWithExpirationHandler: 方法。如果您的应用在执行任务时移至后台,或者如果您的应用已经在后台,则此方法会延迟您的应用暂停。如果您的应用正在执行某些重要任务,例如将用户数据写入磁盘或从网络服务器下载重要文件,这可能很重要。

您可以参考文档在后台实现一个有限长度的下载任务。

其他参考资料:

Download data in background with iOS4 iOS Application Background Downloading

【讨论】:

感谢您的回复。您的答案是完美的,但 beginBackgroundTaskWithExpirationHandler: 如果用户按下主页按钮并将应用程序发送到免费,应该会出现。为什么锁定屏幕会做同样的事情?屏幕锁定时,应用程序不是处于活动状态吗? 不,不是。请参阅 iOS 应用程序编程指南中的“响应中断”developer.apple.com/library/ios/#DOCUMENTATION/iPhone/…。它说“按下睡眠/唤醒按钮是另一种类型的中断,它会导致您的应用暂时停用。...将应用移至后台...并最终锁定屏幕。 我的应用程序曾经可以工作(下载/上传),如果我在使用 iOS 4.X 构建时屏幕被锁定,但在我使用 iOS 5 构建后它停止了:( 你是对的。在 iOS 4 上,该应用程序只会在屏幕锁定时进入非活动状态,但如果按下主页按钮,则该应用程序将移至后台。在 iOS 5 上,当屏幕锁定时,应用也会移到后台。

以上是关于iPad 应用程序在锁定屏幕后变为非活动状态的主要内容,如果未能解决你的问题,请参考以下文章

Android:不活动后,Expo Notification 未显示在锁定屏幕上

iPad应用程序首先进入纵向模式,然后在解锁屏幕后进入横向模式,在锁定时处于横向模式

如何使用 netty 4.0 在连接变为非活动状态后重新连接

在一定的空闲时间后锁定 android 应用程序

如何在锁定屏幕上保持 osx 上的菜单栏应用程序“活动”?

在 Android Q 的锁定屏幕上收到 fcm 通知后开始活动