后台任务能很好的提高用户的体验性,希望能对iOS中的后台任务开发这一块能有比较深的认识的,后台任务是任务级别的配置,它能保证当应用程序切换到后台能继续运行一段时间完成一些耗时的操作,通常这个时间比较短,不适宜做大的耗时操作。
在wwdc2013上面苹果针对iOS7的后台多任务主要从四个方面去说明的:
1)改变后台任务的运行方式(Background Task)
2)增加了后台获取(Background Fetch)
3)增加了推送唤醒(Slient Remote Notifications)
4)增加了后台传输(NSURLSession的BackgroundSession)
后台任务
后台任务是任务级的配置
1.启动后台任务
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{}];
2.结束后台任务
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundUpdateTask];
后台获取
后台获取是应用级配置,其可以帮助应用在合适的时候触发一次后台获取,开发者只能配置最快什么时候做一次获取,不能具体到一个准确的时间点,用法:
1.在info.list中为应用程序配置后台获取
2.在系统启动配置后台获取的频率
3.在AppDelegate中实现-application:performFetchCompletionHandler:执行后台代码
唤醒通知
唤醒通知使设备可以接收远端推送后让系统唤醒设备和我们的后台应用,可以先执行一段代码来准备数据和ui,再提示用户有推送的。这时用户再次进去应用后将不会有其他的等待过程,新的内容会得到呈现。因为每次的远程通知都会唤醒设备,为了保证设备的续航,苹果对发送通知的频率有了限制,尽量少用,它的用法:
1.为应用配置使用远程推送
2.使用最新格式的notification
3.AppDelegate中配置delegate方法处理notification
-(void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHadler
NSURLSession之BackgroundSession
这个主要是用来处理大量数据的下载,即使应用程序在后台也不影响其后面数据的上传和加载的。用法:
1.创建NSURLSession的backgroundSession,并对其进行配置
2.使用该session启动一个数据传输任务
3.在AppDelegate中实现代理方法
-(void)application:(UIApplication*)application handleEventsForBackgroundURLSession:(NSString*)identifier completionHandler:(void(^)())completionHandler
4.在具体的viewController中实现NSURLSessionTask的Delegate方法,根据任务完成的情况进行UI的更新
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location;
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error;
后台传输的状态发生变化的时候,应用将被唤醒并运行appDelegate中的回调,NSURLSessionTask的delegate方法也将被调用