iOS实现无限后台background的方法
来源:互联网 发布:如何用js判断是否闰年 编辑:程序博客网 时间:2024/06/02 19:18
项目中有需求,要在后台监控某些参数,进行一些逻辑,那么就涉及到如何让app可以在后台更久的运行。
在ios7以前,后台可以
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]
的方式,去在后台存活5-10分钟,而在ios8中,只能存活3分钟。
查询过一些资料以后,个人如果要无限的后台存活的话,可能就要涉及到后台播放音乐时最简单的办法。
首先在Required background modes加上audio,然后在applicationDidEnterBackground
中进行播放音乐的操作。
<p class="p1"><span class="s1">- (</span><span class="s2">void</span><span class="s1">)applicationDidEnterBackground:(</span><span class="s3">UIApplication</span><span class="s1"> *)application</span></p>{ UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]; _shouldStopBg = NO; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(){ while ( TRUE ) { if ( _shouldStopBg ){ break; } //do something float remainTime = [[UIApplication sharedApplication] backgroundTimeRemaining]; cootek_log(@"###!!!BackgroundTimeRemaining: %f",remainTime); if ( remainTime < 20.0 ){ cootek_log(@"start play audio!"); NSError *audioSessionError = nil; AVAudioSession *audioSession = [AVAudioSession sharedInstance]; if ( [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&(audioSessionError)] ){ cootek_log(@"set audio session success!"); }else{ cootek_log(@"set audio session fail!"); } NSURL *musicUrl = [[NSURL alloc]initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"bgSong" ofType:@"mp3"]]; self.audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:musicUrl error:nil]; self.audioPlayer.numberOfLoops = 0; self.audioPlayer.volume = 0; [self.audioPlayer play]; [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]; } [NSThread sleepForTimeInterval:1.0]; } });}
其中需要关注的是,audioplayer在arc的环境中会被release,所以需要持有他,而
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];需要在程序在前台的时候去在一次触发(如果在后台无法触发),所以使用音乐播放的时候的前台触发才行。
0 0
- iOS实现无限后台background的方法
- iOS实现无限后台background的方法
- iOS下的后台任务实现方法
- ios 后台无限运行
- iOS无限后台测试
- IOS 无限后台运行
- ios 无限后台任务
- iOS 无限后台任务
- IOS 无限后台运行
- ios 后台无限运行
- iOS 无限后台
- iOS 无限后台运行
- ios 无限后台
- iOS无限后台任务
- IOS 无限后台运行
- IOS 后台无限存活
- ios 后台无限心跳实现:GCDAsyncSocket使用的 Voip、NSTimer、10分钟超长链接
- ios 后台无限心跳实现:GCDAsyncSocket使用的 Voip、NSTimer、10分钟超长链接
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 碰到斑马打印机下载字体问题
- ScrollView嵌套ViewPager 时候 Pager左右滑动不流畅
- Effective C++ 学习笔记(6)
- 第12周-多继承、虚基类,继承和组合-项目4-点、圆的关系(2)
- iOS实现无限后台background的方法
- Android的ToggleButton和Switch以及AnalogColok和DigitalColok的用法-android学习之旅(二十)
- emacs 基本概念与基本操作
- 基于树莓派的门禁系统
- 理解G1垃圾收集器日志
- 分享:5个解决方法帮助你的团队高效运作
- fastjson转bean和集合的实用方法
- Unity3D研究院之使用C#语言建立本地数据库
- adb shell 后续继续输入命令