IOS零碎技术整理(1)-后台运行
2013-09-05 10:54
274 查看
这两天做关于离线通知的功能,总结了一点关于这方面的注意点;按Home键回到桌面后程序很快被挂起,系统将关闭程序的Socket监听,此时程序将不能继续执行网络请求等操作。
两种方式可以使程序继续存活一段时间或者继续保持运行状态:
一是在项目进入后台时开启后台任务,即在applicationDidEnterBackground中执行beginBackgroundTaskWithExpirationHandler,这种方式可以让程序获取10分钟的时间继续运行;
另一种方式是告诉系统本程序支持后台运行,即在项目的info.plist中设置Required background modes为:audio, location, voip,对于location来说这样设置了以后就可以了;
但是对于audio,还需要有以下的条件才能保证程序进入后台后可以继续发送网络请求:
必须将audioSession的Category设置为playback模式:
AVAudioSession* session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
而且进入后台前必须处于播放状态:
[_backgroundPlayer setVolume:0]; //无声播放
[_backgroundPlayer setNumberOfLoops:-1]; //-1表示无限循环播放
[_backgroundPlayer prepareToPlay];
[_backgroundPlayer play];
满足以上两个条件就可以保证程序进入后台以后,程序不会被挂起,也可以正常监听程序的Socket,即可以正常进行网络请求,但是前提是进入后台以后设备不会播放其他音频,否则会剥夺程序的音频播放资格而导致系统关闭程序的Socket监听,虽然程序目前没有被挂起,但是已经不能再进行网络请求,所以针对这个问题,我除了设置程序的audio类型,还设置了location类型(当然,不是这两个必须一起用);另外是否可以通过音频的恢复通知机制实现当前音频在其他音频完毕后恢复播放,然后恢复程序的网络能力,但是这样一来,被阻止期间网络功能也还是不能保持。
注: 单独使用location类型,开启位置跟踪后就可以保持后台运行,不必配合audio使用
相关文章推荐
- 方法整理:4.后台运行GPS (IOS iPhone Object-C)
- IOS零碎技术整理(2)-隐藏系统Tabbar
- IOS零碎技术整理(3)-获取wifi列表
- iOS后台运行机制-实践总结
- IOS后台长时间运行的多种方法
- iOS程序进入后台后仍运行定时器NSTimer
- iOS后台运行机制1
- 【IOS】1.xcode 开发的零碎整理 | ARC 关闭键盘
- IOS后台运行 之 后台播放音乐
- IOS后台运行机制详解(一)
- iOS 和 Android 中的后台运行问题
- iOS App进入后台获取更多的运行时间
- IOS后台运行 之 后台播放音乐
- ios 后台运行
- iOS开发之后台运行调用beginBackgroundTaskWithExpirationHandler
- IOS学习之——设置不允许程序后台运行
- ios socket 后台运行
- IOS开发模块总结(二)后台运行程序(1) 后台运行程序详解(一)
- IOS后台运行 之 后台播放音乐
- IOS App 后台运行