转载

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

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

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

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

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

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

第一步,如图,设置

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

第二步,在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. 如果后台抓取数据过大,同时网络 ` 超时 ` 频繁,整个后台任务会被系统挂起,不再调度

第四步,在设置如图的

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

正文到此结束
Loading...