天天看點

ios7新特性:背景抓取(Background Fetch) 的簡單應用

前言:

iOS的多任務,從4之前的“home立殺”,到4開始引入多任務,但是背景程式并不能執行自己的代碼(除少數經過注冊的服務外),經過5、6的發展,到現在7之後加入了全新的背景模式。主要新增三大特性:

1、增加背景抓取(Background Fetch)

2、增加推送喚醒(Silent Remote Notification)

3、增加背景傳輸(Background Transfer Service)

前幾天發現app“金山電池醫生”在切入背景時會在app switcher中展示不同與退出前的圖檔,這樣在使用者界面友好方面以及保護使用者隐私等方面挺有幫助的。于是自己簡單的試了一下。實作方法不一定準确,但勉強可以達到相應的效果。

先上代碼:

appDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
    return YES;
}
           
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"背景擷取");
    completionHandler(UIBackgroundFetchResultNewData);
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"程式進入背景");
    self.testView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"images.jpeg"]];
    [self.window addSubview:self.testView];
    [self.window bringSubviewToFront:self.testView];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [self.testView removeFromSuperview];
}
           

當然了,要想得到預期效果,需要一點設定,在Capabilities中打開Background Modes,然後勾選Background fetch

ios7新特性:背景抓取(Background Fetch) 的簡單應用

這樣就打開了背景抓取。

首先設定擷取間隔,一般在啟動時設定為最小間隔即可。如果不進行設定,系統會使用預設值UIApplicationBackgroundFetchIntervalNever。也就是永不抓取。

事實上,關于抓取時間這一點知識點還是挺多的,預知詳情可自行google(偷個懶--)

然後在 

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
           

這一方法中為completionHandler設定參數。共有三種選擇:

UIBackgroundFetchResultNewData ---收獲了新資料。

UIBackgroundFetchResultNoData ---沒有新資料。

UIBackgroundFetchResultFailed ---擷取失敗。

在這裡用第一種

最後在應用程式進入前台的時候将圖檔去掉即可。

這種新機制其實用處還有很多,絕不會這麼簡單,有趣的是,它還有“記憶”功能。在這裡就不一一贅述了。

繼續閱讀