在我的应用程序中,我有时会使用NSOperation
在单独的线程上下载和上传数据。这两个过程大约需要2-3分钟如果应用程序保持 Activity 状态,则一切正常。但是,如果iPad屏幕被锁定(自动或手动),则该应用程序将变为非 Activity 状态,并且下载/上传将暂停,并且在经过一段时间的处理失败并出现超时错误后,屏幕被解锁。
我在plist文件中为“必需的背景模式”设置了“应用播放音频”。屏幕锁定时,我是否需要为运行应用程序设置其他任何标志?
请帮助我哪里出了问题。
最佳答案
屏幕锁定后,您的应用程序将变为非 Activity 状态。 iOS应用程序编程指南中的"Responding to Interruptions":
按下“睡眠/唤醒”按钮是另一种类型的中断,会导致您的应用暂时停用。当用户按下此按钮时,系统会禁用触摸事件,将应用程序移至后台,但将应用程序的applicationState属性的值设置为UIApplicationStateInactive
(与UIApplicationStateBackground
相对),最后锁定屏幕。
在同一指南中,您可以根据"Executing a Finite-Length Task in the Background"获得更多时间来执行后台任务:
过渡到后台的应用可能需要额外的时间来完成所有重要的最新任务。要请求后台执行时间,请调用beginBackgroundTaskWithExpirationHandler:
类的 UIApplication
方法。如果在任务执行过程中您的应用程序移至后台,或者如果您的应用程序已在后台,则这种方法会延迟您的应用程序的暂停。如果您的应用程序正在执行某些重要任务,例如将用户数据写入磁盘或从网络服务器下载重要文件,则这可能很重要。
您可以参考文档以在后台实现有限长度的下载任务。
其他参考: