- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对 iOS 中的多任务 API 很困惑,比如 beginBackgroundTaskWithExpirationHandler 等。
例如录制视频,当按下按钮开始录制时,我们把
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
[self setBackgroundRecordingID:[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{}]];
}
录制结束时
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
[[UIApplication sharedApplication] endBackgroundTask:[self backgroundRecordingID]];
}
所以谁能解释一下这些是什么意思。可以看到,在开始录制的时候,beginBackgroundTaskWithExpirationHandler block 是空白的(没有什么可做的?),这些代码的用途是什么?
非常感谢您的解释。
最佳答案
这些调用的目的是让您的应用程序进入后台,而不会像通常那样被挂起。他们要求系统授予您的应用一些额外的生存时间,即使它已经在后台运行。
您想在后台做的事情是 beginBackgroundTask...
和 endBackgroundTask:
之间的事情。重要的是,在使用 beginBackgroundTask...
宣布您的冗长任务开始后,您必须随后调用 endBackgroundTask:
让系统知道您已经完成了现在可以暂停你了。无论您的代码采用何种路径,您都必须始终平衡这些调用。一定要涵盖所有情况!
过期处理程序不是您想要在后台执行的操作;正如 FX 所说的那样,它是一个错误处理程序。它将在您超过背景时间限制(通常为十分钟)的紧急情况下被调用。如果它被调用,这意味着系统将立即暂停您,您无法停止它。
你永远不应该有一个空的过期处理程序!原因是如果你达到了你的时间限制并且你的过期处理程序实际上被调用了,如果它没有调用 endBackgroundTask:
,系统不仅会强行暂停您的应用,还会杀死您的应用!因此,您的过期处理程序必须始终非常快速地执行,并且必须至少包括对 endBackgroundTask:
的调用。
关于ios - 如何为 iOS 应用程序使用多任务处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4643334/
我是一名优秀的程序员,十分优秀!