IOS7 Background Fetch后台应用程序刷新

上篇文章<IOS后台运行浅析>简要说明了在IOS平台执行后台任务需要注意的问题,今天特酷吧主要说下IOS7新增加的后台特性Background Fetch。Background Fetch主要用户需要定期更新数据的app,比如及时通信类,微博等app。IOS7用户可以在 设置->通用->后台应用程序刷新 来开关此功能。
关于Background Fetch的更多请参考:<IOS 7四种后台机制> 中关于Background Fetch的解释,这里只说明怎么使用Background Fetch。
一,开启Background Fetch支持
在XCode->TARGETS->Capabilities->Background Modes打开并添加Background Fetch.
同时在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加:
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
MinimumBackgroundFetchInterval参数值是两次Fetch时间间隔,不能保证每隔这个时间间隔都会调用。这里设置为UIApplicationBackgroundFetchIntervalMinimum,意思是尽可能频繁的调用我们的Fetch方法。
二,增加实现Fetch方法
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{};
每次系统Fetch时都会调用该方法,我们可以在该方法中做刷新数据等操作,操作执行完成以后要调用completionHandlerblock(),比如:completionHandler(UIBackgroundFetchResultNewData);文档中说系统会根据completionHandler(执行的时间)来估计此次Fetch的耗电等。如果耗时耗电比较多,可能会降低被调用的次数。但这个方法也不是不限时执行的,说是有30s的时间来执行操作。completionHandler有三个参数:
UIBackgroundFetchResultNewData 成功拉取数据
UIBackgroundFetchResultNoData 没有新数据
UIBackgroundFetchResultFailed 拉取数据失败或者超时
三,模拟Fetch事件
在实际的IOS7环境中,Fetch事件是由系统管理的,app开发者无法预先知道Fetch事件达到的时机。但XCode也提供了Fetch事件的调试办法,在XCode上运行程序后,在Debug->Simulate Background Fetch.
还有一种情况是app没有运行(不在前台也不在后台),被Fetch事件唤醒执行.这种情况的测试方法如下:
Product->Scheme->Edit scheme 在Debug模式选中Options,点选Launch due to a background fetch event,运行即可。
[特酷吧]可以观察到当Fetch事件到来时,app先进入后台,再执行- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{}。
四,判断设备是否开启后台应用程序刷新功能

折叠C/C++ Code复制内容到剪贴板

  1. if ([[UIApplication sharedApplication] backgroundRefreshStatus] != UIBackgroundRefreshStatusAvailable)
  2. {
  3. UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"您没有开启后台刷新,请在 设置->通用->应用程序后台刷新 中开启." delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
  4. [alertView show];
  5. [alertView release];
  6. }

转载请注明来自特酷吧,本文地址:http://www.tekuba.net/program/320/
参考阅读:
IOS后台运行浅析IOS 7四种后台机制
IOS 屏幕旋转控制详解  IOS 本地和远程推送通知详解
Communicating with Other App程序间通信  IOS应用启动流程生命周期详解

时间: 2024-10-02 23:04:24

IOS7 Background Fetch后台应用程序刷新的相关文章

iOS7 Background Fetch 的实现过程

iOS7中加入了后台获取(Background Fetch)的特性,这个特性使得用户在打开应用之前应用就可以执行部分代码,比如准备数据,刷新UI等等.这个时常一般最大是30秒. 以下是设置Background Fetch的基本步骤,记录一下. 1. 点击Target下的Capabilities ->>Background Modes ->>Background fetch 打钩. 2. 设置fetch最短间隔 可以直接在AppDelegate里面的- (BOOL)applicati

iOS 8:【转】iOS 7 Background Fetch

源地址:http://fann.im/blog/2014/02/25/ios-7-background-fetch/ iOS 7 新加了三个后台任务 API: Background Fetch 后台获取,Silent Remote Notifications 静默推送,?Background Transfer Service 后台传输. Background Fetch 会由系统进行调度,应用可以在后台进行一定的网络请求.这里的限制是后台操作只允许 30s,超时未完成应用会被直接 kill,所以

IOS Background 之 Background Fetch

http://www.ithao123.cn/content-1363653.html 定期更新数据的app,比如及时通信类,微博等app 设置->通用->后台应用程序刷新. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加:[[UIApplication sharedApplication] setMinimumBa

Swift - 后台获取数据(Background Fetch)的实现

前面讲了如何让程序申请后台短时运行.但这个额外延长的时间毕竟有限.所以从iOS7起又引入两种在后台运行任务的方式:后台获取和后台通知. 1,后台获取介绍 后台获取(Background Fetch)是为了那些需要定期更新的应用程序设计的,比如天气应用,新闻客户端,社交网络应用程序等.在启动后台获取之后,应用程序可以在后台被唤醒,在后台获取最新信息,以便在用户将应用程序转到前台时能够立即显示这些信息. 2,后台获取功能开启 首先在选中项目,在Capabilities(功能)选项卡,启用Backgr

iOS7中的多任务 - Background Fetch,Silent Remote Notifications,?Background Transfer Service

转自:http://onevcat.com/2013/08/ios7-background-multitask/ 在IOS 7 出来不就,公司内部也组织了一次关于IOS 7 特性的的分享,今天看见onevcat 的blog,感叹它很有耐性和细心,写的这么详细,那就毫无保留原封不动的(其实也没有什么好改写的,实在是perfect )的分享给大家,希望对大家有所帮助. WWDC 2013 Session笔记 - iOS7中的多任务 iOS7的后台多任务特性 这是我的WWDC2013系列笔记中的一篇,

IOS研究之IOS7四种后台机制

 IOS 7中,实际上APP拥有四种后台模式,无论是哪一种后台机制,均需要利用苹果给予的相应后台接口实现.IOS7系统中,开发者可以灵活利用多种后台接口(API)实现更加智能的应用操作.对获取开机累计时间不了解的看NSProcessInfo获取系统开机累计时间 一,无后台仅推送 第一种后台方式为传统的无后台操作,仅有苹果推送机制,这种方式出现在iOS 3.x以下的大部分系统版本上.这个方式下,应用在按下Home键后即会关闭退出,其数据通过苹果搭建的推送服务器传输,并不需要应用后台运行.这种方

仅用aspx文件实现Ajax调用后台cs程序。(实例)

仅用aspx文件实现Ajax调用后台cs无刷新程序.(实例) 两个文件:aaa.aspx 和aaa.aspx.cs 一.aaa.aspx <script type="text/javascript"> function Request() { alert("1"); $.ajax({ type: 'post', url: 'Test442.aspx?method=Send2', // [调用后台的事件] cache: false, success: fu

PHP 后台定时循环刷新某个页面 屏蔽apache意外停止

PHP 后台定时循环刷新某个页面 如果间隔时间过长的话  会出现apache自动停止的现象.出现的原因则是设置了 <IfModule mpm_winnt_module> ThreadsPerChild 450 MaxConnectionsPerChild 3000</IfModule> 错误日志报错 [mpm_winnt:notice] [pid 126236:tid 316] AH00362: Child: Waiting 270 more seconds for 3 worke

angularJS开启服务器后台运行程序,找不到scripts/web-server.js

学习angularJS时,教程里说使用node scripts/web-server.js开启服务器后台运行程序.一直出错.后来发现原因是这是老版本里的命令.现在都是用sudo npm start就可以了 运行完sudo npm start,再开启karma测试 sudo npm test 然后再浏览器中输入http://localhost:8000/app/index.html即可访问angularJS教程里的index.html. angularJS开启服务器后台运行程序,找不到script