iOS7中加入了後臺獲取(Background Fetch)的特性,這個特性使得用戶在打開應用以前應用就能夠執行部分代碼,好比準備數據,刷新UI等等。這個時常通常最大是30秒。網絡
如下是設置Background Fetch的基本步驟,記錄一下。app
1. 點擊Target下的Capabilities ->>Background Modes ->>Background fetch 打鉤。dom
2. 設置fetch最短間隔測試
能夠直接在AppDelegate裏面的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法內加上fetch
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
UIApplicationBackgroundFetchIntervalMinimum 是告訴系統儘量頻繁的進行Background fetch,可是這個頻率多頻繁呢?這個是系統本身決定的,開發者就沒法得知啦。spa
即便你把 MinimumBackgroundFetchInterval 設的很小,系統也只能保證在這個時間段內程序不會被喚醒,而不是說每過這麼長時間就會被喚醒。所以,開發者應該理性設置喚醒的時間,根據程序的具體狀況來考慮。代理
3. 接下來就能夠實現這個帶Block回調的 Background fetch 的代理方法了。code
在這裏咱們能夠進行網絡請求查看是否數據有更新。不過由於超時限制是 30秒,因此若超過這個時間,就須要使用Background Transfer Service。orm
我在這個方法裏面寫了一個本地通知用來測試。blog
//------------------------------------------------------------- #pragma mark - Background fetch related delegate //------------------------------------------------------------- - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"我就是傳說中的Background Fetch💦"); UILocalNotification * localNoti = [[UILocalNotification alloc] init]; localNoti.hasAction = YES; //滑動來... NSArray * actionMsgs = @[@"查看一個巨大的祕密",@"看看小夥伴在作什麼",@"看美女圖片",@"領取獎品",@"看看洪哥在作什麼",@"掏錢買下一個DropBeacon",@"請世文吃飯"]; localNoti.alertAction = [actionMsgs objectAtIndex:arc4random()%actionMsgs.count]; localNoti.alertBody = @"我就是傳說中的Background Fetch💦"; [[UIApplication sharedApplication] scheduleLocalNotification:localNoti]; completionHandler(UIBackgroundFetchResultNewData); }
4. 接下來就能夠進行測試了。
測試的方法有兩種。
第一種能夠在RunScheme的選項中勾選Launch due to a background fetch event,以下圖
第二種方式是選擇Xcode 菜單欄的 Debug下的 Simulate Background Fetch來將模擬器直接切換到 Background Fetch狀態,以下圖