- 浏览: 1030077 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
繁星水:
Useful!!
Object-C之(Null)与(Bool) -
pacer123:
请问注解@ApiModelProperty 在哪个jar包下面 ...
Micro Service工具集之Swagger:可测试的样式化API文档 -
sucheng2016:
这东东真的好用么/
对象转换利器之Dozer -
zzq0324:
http://git.oschina.net/zzq0324/ ...
基于Spring-WS的Restful API的集成测试 -
lrz0534:
你好,我在maven上面下载了swagger-springmv ...
Micro Service工具集之Swagger:可测试的样式化API文档
在WWDC2013中 水果公司把iOS7的中后台多任务单独开出来一个Session讲述(Session 204 What’s New with Multitasking),其对后台多任务的改动如下:
开发者如果可以更好的利用这些特性,可以很大的提升自己的应用体验,比方说,使用后台获取特性,在你打开微博之前,最新的微博已经自动刷出来,不需要用户再手动刷一次。
知识点
用法
后台任务
后台任务是任务级别的配置,它的作用是当应用切换到后台后仍能保持一段运行时间以完成一些耗时的任务,通常这个时间比较短,不适宜做耗时大的操作,用法
1.启动后台任务
后台获取
后台获取是应用级配置,其可以帮助应用在合适的时候触发一次后台获取,我们只能配置最快什么时候做一次获取,但是具体什么时候做,这得看设备的心情,不过水果公司说,其会根据用户习惯做后台获取,比方说你每天中午12:00使用这个应用,那么它就会在11:50给你做一次后台获取,是不是这么神,有待检验。用法:
1.在info.list中为应用配置后台获取
2.在系统启动配置后台获取的(最快)频率
3.在AppDelegate中实现方法-application:performFetchWithCompletionHandler: 执行后台获取代码
远程唤醒通知
在iOS7中,对远程通知进行了改造,新的远程通知可以附带上一些参数,这样可以减少一些不必要的网络请求,提升性能.它使设备可以接收远端推送后让系统唤醒设备和我们的后台应用,并先执行一段代码来准备数据和UI,然后再提示用户有推送。这时用户如果解锁设备进入应用后将不会再有任何加载过程,新的内容将直接得到呈现。注意,因为,每一次远程通知都会唤醒设备,为了保证设备续航,水果公司对发送通知的频率是有限制的,尽量少用。用法
1.为应用配置使用远程推送
2.使用最新格式的notification
NSURLSession之BackgroundSession
这个主要就是用来处理大数据量的下载的,其保证应用即使在后台也不影响数据的上传和下载。用法:
1.创建NSURLSession的backgrounSession,并对其进行配置(参见上一篇文章)
2.使用该Session启动一个数据传输任务。
3.在AppDelegate中实现方法告诉应用:
4.在具体的ViewController中实现NSURLSessionTask的Delegate方法,根据任务完成或出错的情况对UI进行更新:
一旦后台传输的状态发生变化(包括正常结束和失败)的时候,应用将被唤醒并运行appDelegate中的回调,接下来NSURLSessionTask的Delegate方法将在后台被调用
实战
这儿我实现了一个后台获取的Demo,我使用后台获取去获取一张图片,显示在页面上。下面是演示效果:
实现代码:
AppDelegate.m
MainViewController.m
BackgroundFetchViewController.m
所有代码在这儿:https://github.com/xianlinbox/iOS7_New
参考文章:
http://www.shinobicontrols.com/blog/posts/2013/09/24/ios7-day-by-day-day-3-background-fetch
http://www.objc.io/issue-5/multitasking.html
http://onevcat.com/2013/08/ios7-background-multitask/
- 1. 改变了后台任务的运行方式(Background Task)
- 2. 增加了后台获取(Background Fetch)
- 3. 增加了推送唤醒(静默推送,Silent Remote Notifications)
- 4. 增加了后台传输(NSURLSession的BackgroundSession)
开发者如果可以更好的利用这些特性,可以很大的提升自己的应用体验,比方说,使用后台获取特性,在你打开微博之前,最新的微博已经自动刷出来,不需要用户再手动刷一次。
知识点
用法
后台任务
后台任务是任务级别的配置,它的作用是当应用切换到后台后仍能保持一段运行时间以完成一些耗时的任务,通常这个时间比较短,不适宜做耗时大的操作,用法
1.启动后台任务
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ ... }];2.结束后台任务
[[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
后台获取
后台获取是应用级配置,其可以帮助应用在合适的时候触发一次后台获取,我们只能配置最快什么时候做一次获取,但是具体什么时候做,这得看设备的心情,不过水果公司说,其会根据用户习惯做后台获取,比方说你每天中午12:00使用这个应用,那么它就会在11:50给你做一次后台获取,是不是这么神,有待检验。用法:
1.在info.list中为应用配置后台获取
2.在系统启动配置后台获取的(最快)频率
3.在AppDelegate中实现方法-application:performFetchWithCompletionHandler: 执行后台获取代码
远程唤醒通知
在iOS7中,对远程通知进行了改造,新的远程通知可以附带上一些参数,这样可以减少一些不必要的网络请求,提升性能.它使设备可以接收远端推送后让系统唤醒设备和我们的后台应用,并先执行一段代码来准备数据和UI,然后再提示用户有推送。这时用户如果解锁设备进入应用后将不会再有任何加载过程,新的内容将直接得到呈现。注意,因为,每一次远程通知都会唤醒设备,为了保证设备续航,水果公司对发送通知的频率是有限制的,尽量少用。用法
1.为应用配置使用远程推送
2.使用最新格式的notification
{ "aps" : { "content-available" : 1 }, "content-id" : 42 }3.AppDelegate中配置delegate方法处理notification:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
NSURLSession之BackgroundSession
这个主要就是用来处理大数据量的下载的,其保证应用即使在后台也不影响数据的上传和下载。用法:
1.创建NSURLSession的backgrounSession,并对其进行配置(参见上一篇文章)
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方法将在后台被调用
实战
这儿我实现了一个后台获取的Demo,我使用后台获取去获取一张图片,显示在页面上。下面是演示效果:
实现代码:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //设定BackgroundFetch的频率 [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; … } #pragma mark - backgroundFetch delegates -(void) application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { //当后台获取被触发时,或调用下面的代码,这儿我直接去调用MainViewController的方法去刷新UI。 UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; MainViewController *mainViewController = (MainViewController *)navigationController.topViewController; [mainViewController fetchImageWithCompletionHandler:completionHandler]; //修改Icon的bageNumber提醒后台又刷新,强迫症者慎用 [UIApplication sharedApplication].applicationIconBadgeNumber +=1; }
MainViewController.m
-(void)fetchImageWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { //调用子UIViewController的方法刷新UI NSLog(@"main controller called fetch"); [self.backgroundFetchViewController initImageViewWithCompletionHandler:completionHandler]; }
BackgroundFetchViewController.m
#import "BackgroundFetchViewController.h" @interface BackgroundFetchViewController () @end @implementation BackgroundFetchViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; return self; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } -(NSURL *)createDirectoryForDownloadItemFromURL:(NSURL *)location { NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *urls = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; NSURL *documentsDirectory = urls[0]; return [documentsDirectory URLByAppendingPathComponent:[location lastPathComponent]]; } //把文件拷贝到指定路径 -(BOOL) copyTempFileAtURL:(NSURL *)location toDestination:(NSURL *)destination { NSError *error; NSFileManager *fileManager = [NSFileManager defaultManager]; [fileManager removeItemAtURL:destination error:NULL]; [fileManager copyItemAtURL:location toURL:destination error:&error]; if (error == nil) { return true; }else{ NSLog(@"%@",error); return false; } } - (void)showImageWithURL:(NSURL *)imageURL { UIImage *image = [UIImage imageWithContentsOfFile:[imageURL path]]; self.imageView.image = image; self.imageView.contentMode = UIViewContentModeScaleAspectFit; self.imageView.hidden = NO; } -(void) initImageViewWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"Background Fetch View Controller called"); NSURLSessionDownloadTask *task = [[self session] downloadTaskWithRequest:[self request] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { if (!error) { // 获取新的数据,刷新UI NSURL *imageURL = [self createDirectoryForDownloadItemFromURL:location]; NSLog(@"Fetch image successful, %@",[imageURL path]); [self copyTempFileAtURL:location toDestination:imageURL]; [self showImageWithURL:imageURL]; // 调用compeletionHandler, 系统会刷新应用在App Switcher中的UI completionHandler(UIBackgroundFetchResultNewData); }else{ NSLog(@"Fetch data failed"); completionHandler(UIBackgroundFetchResultFailed); } }]; [task resume]; } - (NSURLSession *)session { //创建NSURLSession NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig]; return session; } - (NSURLRequest *)request { //创建请求 NSURL *url = [NSURL URLWithString:@"http://upload.wikimedia.org/wikipedia/commons/e/e0/Steve_Jobs_with_the_Apple_iPad_no_logo_(cropped).jpg"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; return
所有代码在这儿:https://github.com/xianlinbox/iOS7_New
参考文章:
http://www.shinobicontrols.com/blog/posts/2013/09/24/ios7-day-by-day-day-3-background-fetch
http://www.objc.io/issue-5/multitasking.html
http://onevcat.com/2013/08/ios7-background-multitask/
发表评论
-
Xcode的代码结构管理
2015-07-21 22:34 2712Merge Conflicts on .project fil ... -
记Protocol Oriented Programming in Swift of WWDC 2015
2015-07-12 20:28 1788其实最先朋友让我就这个题目写篇文章的时候,我是拒绝的,因为觉得 ... -
你应该知道的Core Animation知识
2015-06-07 00:04 1266分享最近读的一本书:https://github.com/At ... -
iOS7之定制View Controller切换效果
2014-04-18 23:19 38342在iOS5和iOS6前,View Controller的切换主 ... -
Object-C之(Null)与(Bool)
2014-04-05 14:08 9059在写iOS程序的时候,想初始化一个空值的时候,经常会迷茫到底是 ... -
iOS之Local Notification(本地通知)·
2014-03-23 21:31 19453Local Notification的作用 Local Not ... -
实战iOS7之NSURLSession
2014-02-01 20:19 30609NSURLSession VS NSURLConnection ... -
iOS概念之KVO(Key-Value Observing)
2014-01-26 20:21 21726在一个复杂的,有状态的系统中,当一个对象的状态发生改变,如何通 ... -
实战iOS7之UIDynamics
2014-01-26 14:26 10442最近在看Sam Davies写的iOS7系列文章(http:/ ... -
在iOS App的图标上显示版本信息
2013-12-29 19:46 5571最近读到一篇文章(http://www.merowing.in ... -
构建iOS持续集成平台
2013-09-25 20:33 5337之前写的关于iOS持续集成平台的文章终于在infoQ上发表了, ... -
Object-C的对象模型
2013-09-17 20:04 2390在Object-C的类型结构中,有几个比较重要的概念Objec ... -
使用AVAudioRecorder,AVAudioPlayer构建简单录音笔应用
2013-07-12 05:57 16867在iOS的基础类库中, 提供了AVFoundation Fra ... -
UIView的Animation效果
2013-07-05 19:05 23691所谓动画效果,就是会动的画,到iOS App中来说的话,就是各 ... -
iOS使用GameKit构建“Master-Client”网络
2013-07-02 20:34 2089GameKit是iOS SDK中一个常用的框架。其核心功能有3 ... -
Object-C中的块(Block)
2013-06-26 20:22 9162在Object-C中,块的概念 ... -
Object-C动态特性之protocol
2013-06-25 16:11 8550在Object-C中,Protocol被用来定义一组独立于具体 ... -
Object-C中的动态特性Category
2013-06-22 08:41 1678刚接触Object-C哪会儿, ... -
统一iOS客户端和服务器端认证
2013-01-18 21:05 3346最近公司的同事业余时间搞了一个内部的类about. ... -
iOS开发随笔记之 常量声明和NSUserDefaults
2012-12-09 14:19 5033在iOS中,常量声明一般使用2种方式 1、使用C语言的预处理方 ...
相关推荐
2. ... 3. }] 1. { 4. }, 6. } 2. didReceiveRemoteNotification:(NSDictionary *)use
iOS 7 编程实战 英文版 iOS 7 编程实战 英文版 iOS 7 编程实战 英文版 iOS 7 编程实战 英文版 iOS 7 编程实战 英文版 iOS 7 编程实战 英文版 iOS 7 编程实战 英文版 中文版也有
iOS 7学习:多任务处理之Background Fetch对应的Demo,主要探讨Background Fetch后台工作模式。
多线程多任务下载实例代码 传个资源这个费事 写那么多说明
iOS 7 编程实战 带书签目录 高清完整版
Swift编程实战 iOS应用开发实例及完整解决方案 pdf 清晰版本
Xamarin iOS开发实战中册
手动开启ios下的多任务手势 越狱什么的都是可以的
这是 iOS 6 编程实战 全书的代码。。我找不到这本书的免费电子文档。。如果有找到这本书的电子文档的朋友请发我一份吧
NULL 博文链接:https://o0o0o0o.iteye.com/blog/1312452
斯坦福ios7公开课纸牌源码(stanford ios7)
IOS 后台的可持续定位,遵循苹果的机制,后台会10分钟唤醒一次,给10S的执行时间,然后关闭。这样一直循环。
本书先授你以渔,再授你以鱼,多处独家内容首次公开,老少咸宜,童叟无欺,为想要从事iOS逆向工程学习/工作/研究的你量身打造,手把手带你进入iOS逆向工程的大门,确保你在阅读完本书后能够自主进行更深层次的研究,...
《iOS编程实战》是受开发者喜爱的iOS进阶图书。它包含大量代码示例,主线是围绕如何设计、编写和维护的iOS应用。开发者可从《iOS编程实战》学到大量关于设计模式、编写可重用代码以及语法与新框架的知识。
iOS编程实战 iOS7 美团翻译 iOS7 编程代码和书籍 全iOS7 编程代码和书籍 全iOS7 编程代码和书籍 全iOS7 编程代码和书籍 全iOS7 编程代码和书籍 全
这个教程将会教会你如何在后台传输数据,如何使用iOS7提供的多任务API。我将会教会你如何在后台下载一个文件,并且在文件下载完成时弹出一个本地的提醒。 后台数据传输起源于iOS6,允许在前台或者后台下载数据,但是...
连通mac和windows开发的好书,支持在windows下做IOS的开发
模拟iOS7双击home键后浏览界面的滑动以及删除效果,并且重用了卡片,只需要简单的调用就可以使用,这是代码地址,https://github.com/Yuzeyang/GCCardViewController,喜欢的话,请star一下~
涵盖图形图像,图表,网页视图,地图,音视频,相机,传感器,网络。
ios7高级编程iOS7 Programming Cookbook,IOS电子书籍之一,欢迎下载