ios开发-程序压后台后,悄悄的抓取数据~~

ios开发-程序压后台后,悄悄的抓取数据~~

我们使用某个app的时候,当我们将程序压到后台之后,我们希望它还能从服务器抓取一些数据,类似微博,微信,qq这些程序压后台

之后,我们依然能看到icon上显示未读数量。但是ios系统是伪多任务操作系统。

当我们将程序压后台之后,大概过1分钟,程序就会被关闭。就不能抓取数据了。很久之前的做法是:压后台之后,播放一个没有声音

的音频,保证程序存活。然后苹果很快发现了这种方法,并禁止了。我们用这种方法提交审核之后,一般都会被苹果驳回。当然,苹果

依然很贴心的给我提供了相应的解决办法。(使用swift演示。oc的方法与swift一致)

第一步,如图,设置

技术分享

 

第二步,在AppDelegate中

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObjectAnyObject]?) -> Bool 

中设置最小后台抓取时间

1         //设置最小后台抓取间隔
2         application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

 

第三步,在AppDelegate中实现一个代理方法,并编写代码

技术分享
 1  ///后台抓取数据的代理方法
 2     func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
14         
15         //请求需要获取的数据
16         HJCStatus.loadUnReadStatus { (count) -> () in
17             application.applicationIconBadgeNumber = count
18             
19             if count > 0 {
//回调,告诉此次网络请求的结果 20 completionHandler(UIBackgroundFetchResult.NewData) 21 }else{
//回调,告诉此次网络请求的结果 22 completionHandler(UIBackgroundFetchResult.NoData) 23 } 24 } 25 }
技术分享

 这一步中,有几点注意点

        1. 不能做太大数据量的请求,要尽量的小

        2. 网络请求,结束后,一定要通过回调方法,告诉系统此次网络请求的结果

        - 有数据

        - 无数据

        - 错误

        系统可以根据报告,自动调度后台的网络数据抓取的频率,具体的调度时间,程序员无法干预

        3. 如果后台抓取数据过大,同时网络`超时`频繁,整个后台任务会被系统挂起,不再调度

 

第四步,在设置如图的

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。