Hri*_*shi 5 ios4 ios ios5 ios6
当应用程序进入后台状态时我正在进行一些处理,我把它放在beginBackgroundTaskWithExpirationHandler()之下,因此应该分配十分钟.但是,我相信该应用程序在此之前被暂停.我正在执行的任务是内存和CPU密集型,因此操作系统是否可能将我的应用程序暂停状态?
如果是这样,有没有办法绕过这些限制.(我愿意使用私有API).
以下是启动后台任务的代码:
if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]){
if([[UIDevice currentDevice] isMultitaskingSupported]){
__block UIBackgroundTaskIdentifier bgTask;
UIApplication *application = [UIApplication sharedApplication];
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self captureImage];
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定 Daij-Dan 是否完全正确。
这部分我同意他的观点:
the os may kill you at any time when its pressured.
Run Code Online (Sandbox Code Playgroud)
然而“压力”这个词是相当模糊的。我相信应该有很大的压力(例如内存不足)来暂停合法请求更多时间的应用程序。一方面,这是一个真实的场景案例。另一方面,这种情况发生的频率并不高(iOS 设备现在有相当多的内存)。
来自文档(http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html):
对此方法的每次调用都必须通过对 endBackgroundTask: 方法的匹配调用来平衡。运行后台任务的应用程序的运行时间是有限的。(您可以使用backgroundTimeRemaining 属性了解还有多少可用时间。)如果您在时间到期之前没有为每个任务调用endBackgroundTask:,系统将终止该应用程序。如果您在处理程序参数中提供块对象,系统会在时间到期之前调用您的处理程序,以便您有机会结束任务。
我会推荐:
如果您的应用程序被暂停,请查看系统控制台日志。
PS 我删除了 iphone-privateapi 标签,因为它是公共 API。
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |