天天看点

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 ---获取失败。

在这里用第一种

最后在应用程序进入前台的时候将图片去掉即可。

这种新机制其实用处还有很多,绝不会这么简单,有趣的是,它还有“记忆”功能。在这里就不一一赘述了。