前言:
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]; }
这样就打开了后台抓取。
首先设置获取间隔,一般在启动时设置为最小间隔即可。如果不进行设定,系统会使用默认值UIApplicationBackgroundFetchIntervalNever。也就是永不抓取。
事实上,关于抓取时间这一点知识点还是挺多的,预知详情可自行google(偷个懒--)
然后在
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
这一方法中为completionHandler设置参数。共有三种选择:
UIBackgroundFetchResultNewData ---收获了新数据。
UIBackgroundFetchResultNoData ---没有新数据。
UIBackgroundFetchResultFailed ---获取失败。
在这里用第一种
最后在应用程序进入前台的时候将图片去掉即可。
这种新机制其实用处还有很多,绝不会这么简单,有趣的是,它还有“记忆”功能。在这里就不一一赘述了。