申请短时间后台运行时间

2018-02-05  本文已影响39人  woniu

在项目中需要SDK在进入后台之后发送采集的数据,可是发现有时数据并不能发送成功。当然,这不是我数据的问题,APP在按Home键进入后台之后在几秒钟之后会退出程序,从而导致网络没有足够的时间发送成功数据。所以为了解决这个来不及发送数据的问题,我们就必须要申请短时间的后台运行时间。说明下,在iOS 7之前我们可以申请600s,但是之后就只能申请到180s的后台运行时间。当然,如果APP是音乐或网络电话类型的,可以申请长时间的后台运行,这个不在我们的讨论之列。下面我们来详细分析一下吧:

1、backTaskIdentifier必须是同一个,所以首先创建全局的对象:

@property (nonatomic,assign) UIBackgroundTaskIdentifier background_task;

2、我们在进入后台的时候调用申请运行时间的方法,开始和结束必须成对调用,180s过后会执行block里面的事件,然后我们终结掉事件:

- (void)EnterBackgroundNotification{
    //  声请进入后台的时间,在180s之后执行Block里面的方法。(亲测180s)
     self.background_task = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
         if (self.background_task != UIBackgroundTaskInvalid) {
             [[UIApplication sharedApplication] endBackgroundTask: self.background_task];
             self.background_task = UIBackgroundTaskInvalid;
         }
    }];
}

3、如果SDK在180s内又从后台进入前台,我们在进入前台的方法中终结申请时间事件:

//这个地方我觉得系统应该就已经终结了,因为现在已经是在前台了啊,所以感觉不必在这里调用这个方法,有些多余。
- (void)ForegroundNotification{
    [[UIApplication sharedApplication] endBackgroundTask: self.background_task];
    self.background_task = UIBackgroundTaskInvalid;
    }
上一篇下一篇

猜你喜欢

热点阅读