保存在后台线程未完成
Posted
技术标签:
【中文标题】保存在后台线程未完成【英文标题】:Saving in Background Thread not getting finished 【发布时间】:2015-03-03 17:44:24 【问题描述】:我有一个AVAudioRecorder
的实例,我注意到当用户关闭应用程序的速度过快且录制较大时,文件无法正确保存。
当我在主线程中调用[recorderObject stop]
并且文件保存在本地时,甚至会发生这种情况。
我还尝试在录制停止后移动文件(在(void)audioRecorderDidFinishRecording:successfully:
方法中)。但是我注意到,当我在具有high
优先级的后台线程中使用NSFileManager
进行移动时,它也并不总是完成。
我是否有办法确保文件得到保存,即使用户在完成较长的录制后不久退出应用程序也是如此?
谢谢
【问题讨论】:
你是否尝试过要求ios完成后台任务?developer.apple.com/library/ios/documentation/iPhone/Conceptual/… 【参考方案1】:查看Apple's documentation 在后台执行任务。
移至后台的应用程序应将自己置于 尽可能快地进入静止状态,以便它们可以暂停 由系统。如果您的应用程序正在执行一项任务并且需要 完成该任务的额外时间很少,它可以调用
beginBackgroundTaskWithName:expirationHandler:
或UIApplication
的beginBackgroundTaskWithExpirationHandler:
方法 对象请求一些额外的执行时间。调用任何一个 这些方法会暂时延迟您的应用程序的暂停,给它 一点额外的时间来完成它的工作。完成这项工作后, 你的应用必须调用 endBackgroundTask: 方法让系统 知道已经完成,可以暂停了。
【讨论】:
beginBackgroundTaskWithExpirationHandler:
正是我想要的。谢谢以上是关于保存在后台线程未完成的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Swift 的后台线程中从 CoreData 中获取未保存的数据?
CoreData 在后台 MOC 的保存操作期间无法完成故障
当保存在后台异步完成时,我应该如何保证从嵌套上下文中的不同线程获取结果是最新的?