前言:
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
這樣就打開了背景抓取。
首先設定擷取間隔,一般在啟動時設定為最小間隔即可。如果不進行設定,系統會使用預設值UIApplicationBackgroundFetchIntervalNever。也就是永不抓取。
事實上,關于抓取時間這一點知識點還是挺多的,預知詳情可自行google(偷個懶--)
然後在
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
這一方法中為completionHandler設定參數。共有三種選擇:
UIBackgroundFetchResultNewData ---收獲了新資料。
UIBackgroundFetchResultNoData ---沒有新資料。
UIBackgroundFetchResultFailed ---擷取失敗。
在這裡用第一種
最後在應用程式進入前台的時候将圖檔去掉即可。
這種新機制其實用處還有很多,絕不會這麼簡單,有趣的是,它還有“記憶”功能。在這裡就不一一贅述了。