保存在后台线程未完成

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:UIApplicationbeginBackgroundTaskWithExpirationHandler: 方法 对象请求一些额外的执行时间。调用任何一个 这些方法会暂时延迟您的应用程序的暂停,给它 一点额外的时间来完成它的工作。完成这项工作后, 你的应用必须调用 endBackgroundTask: 方法让系统 知道已经完成,可以暂停了。

【讨论】:

beginBackgroundTaskWithExpirationHandler: 正是我想要的。谢谢

以上是关于保存在后台线程未完成的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 的后台线程中从 CoreData 中获取未保存的数据?

CoreData 在后台 MOC 的保存操作期间无法完成故障

当保存在后台异步完成时,我应该如何保证从嵌套上下文中的不同线程获取结果是最新的?

Python 3 - 主线程未检测到后台线程中的KeyboardInterrupt,直到用户将鼠标悬停在GUI窗口上

托管对象上下文未保存到持久存储

iOS 在后台保存主线程 NSManagedObjectContext 更改