IOS 执行一个有限长度的后台任务
来源:互联网 发布:好的胎教软件 编辑:程序博客网 时间:2024/05/16 19:04
当应用程序转入后台时,可以请求额外的时间,来完成重要的一分钟任务。请求后台执行时间,可以调用UIApplication类的beginBackgroundTaskWithExpirationHandler: 方法,这个方法延迟你的应用程序挂起的时间。这可能是重要的,若执行一些重要任务,如将用户数据保存至磁盘或从服务器下载重要的文件。
beginBackgroundTaskWithExpirationHandler:方法的使用方式是在你需要保护的任务开始执行之前被调用。每次调用beginBackgroundTaskWithExpirationHandler:方法,必须调用相应的endBackgroundTask:方法来标致任务结束,来保持平衡。因为应用程序仅有有限的时间来结束后台任务,所以你必须在过期前调用该方法,否则系统将终止的应用。为了避免这种情况,你可以提供一个过期的处理(你可以使用UIApplication类的 backgroundTimeRemaining 属性去看还剩余多少时间)。
重要:应用程序可以同时运行任意数量的任务。每次你开始一个后台任务,方法beginBackgroundTaskWithExpirationHandler:返回一个对那个任务的唯一标识。你必须将相同的标识传入endBackgroundTask:方法中,当那个任务结束的时候。
下面的代码展示了当你应用进入后台时,如何启动一个后台任务其中包含一个对于耗时太长任务的过期处理。这个任务将自己提交到分发队列进行异步执行,因此applicationDidEnterBackground:方法可以正常返回.运用blocks减少对重要变量引用管理的代码,如后台任务标识。变量bgTask是这个类的成员变量,用于存放当前后台任务标识的指针并且在该这个方法之前进行了初始化。
代码 在退出时,启动一个后台任务
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
// Clean up any unfinished task business by marking where you
// stopped or ending the task outright.
//通过标记您停止或结束任务,彻底清理任何未完成的业务任务。
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
//开始的长时间运行的任务,并立即返回
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do the work associated with the task, preferably in chunks.
// 做与任务相关联的工作,最好是在一块
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
注意:启动一个后台任务时候总是提供一个过期处理,但若你想知道你的应用剩余执行时间,通过UIApplication的backgroundTimeRemaining属性的值获取。
在你自己的过期处理中可以包含关闭你任务的以外的代码。然而 在你过期处理被调用时,你的应用已经非常接近它的时间限制,所以你包含的代码执行时间不能太长。
由于这个原因,仅可以执行最小化的清空操作和结束任务操作。
- IOS 执行一个有限长度的后台任务
- iOS 应用进入后台后,如何短暂的执行一个任务
- ios后台执行任务详解
- ios后台执行任务详解
- IOS 后台无限执行任务
- IOS 后台无限执行任务
- IOS 后台无限执行任务
- IOS 后台无限执行任务
- 关于iOS 后台执行任务
- 一个JavaWeb后台任务执行工具的设计与实现
- 在程序后台执行一个短时间的任务
- 在程序后台执行一个短时间的任务
- IOS的后台任务
- IOS的后台任务
- IOS的后台任务
- IOS的后台任务
- iOS的后台任务
- iPhone的后台执行任务
- Android设计模式系列
- 查找文件夹下的所有文件内容中的特定单词
- Cortex-M3 异常和中断---基于NXP LPC177x/8x
- NYOJ 255 C小加 之 随机数
- Android---接收来自其他应用程序的内容
- IOS 执行一个有限长度的后台任务
- 神州电脑中止IPO背后:再被质疑财务造假
- 微软提醒XP只剩365天寿命:用户被绑架?
- 射频微波最新资料大全
- 华为2012年净利润超150亿元 收入四倍于腾讯
- 关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
- windows上的ftp上传,简单,方便
- [C++]Undefined reference to 'vtable for C***'
- 支付宝挑战银行传统业务 手机支付5万元内免手续费