您的位置:首页 > 其它

beginBackgroundTaskWithExpirationHandler

2016-09-05 17:38 253 查看


beginBackgroundTaskWithExpirationHandler

字数234 阅读2060 评论6 喜欢1

程序进入后台,我用这个方法beginBackgroundTaskWithExpirationHandler向系统申请更多时间,申请到的是180秒。正常是需在beginBackgroundTaskWithExpirationHandler中调用endBackgroundTask来告诉系统停止程序任务,系统到了时间就会停止任务。但是不在beginBackgroundTaskWithExpirationHandler中调用的话,是可以超出180秒的范围,我试过在任务完成后再去调用endBackgroundTask也没有出现问题,这个时间的上限是多少就没有考究过了。

以下是转自:http://www.jianshu.com/p/a668f1770efb

正常程序退出后,会在几秒内停止工作;

要想申请更长的时间,需要用到

beginBackgroundTaskWithExpirationHandler

endBackgroundTask

一定要成对出现
- (void)applicationDidEnterBackground:(UIApplication *)application {

[self beginTask];
//在非主线程开启一个操作在更长时间内执行; 执行的动作
aa =0;
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(go:) userInfo:nil repeats:YES];
}

-(void)go:(NSTimer *)tim
{
NSLog(@"%@==%ld ",[NSDate date],aa);
aa++;
if (aa==9) {
[_timer invalidate];
[self endBack]; // 任务执行完毕,主动调用该方法结束任务
}
}

-(void)beginTask
{
NSLog(@"begin=============");
_backIden = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"begin  bgend=============");
[self endBack]; // 如果在系统规定时间内任务还没有完成,在时间到之前会调用到这个方法,一般是10分钟
}];
}

-(void)endBack
{
NSLog(@"end=============");
[[UIApplication sharedApplication] endBackgroundTask:_backIden];
_backIden = UIBackgroundTaskInvalid;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐