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

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

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

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

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

第一步,如图,设置

第二步,在AppDelegate中

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> 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. 如果后台抓取数据过大,同时网络`超时`频繁,整个后台任务会被系统挂起,不再调度

第四步,在设置如图的

你可能感兴趣的内容
0条评论

dexcoder

这家伙太懒了 <( ̄ ﹌  ̄)>
Owner