ios7以后如何实现App长时间后台运行
2016-01-14 22:20
330 查看
对于ios7,苹果支持几种后台运行模式,backgroundTask,voip,后台播放音乐等,具体看官方文档就好。
我这边需要在后台跑一个长时间运行的计时器,所以就不能让app进入suspend状态。
很早以前听说可以通过后台播放音乐来实现,借鉴了一下,测试好几天,找出来了一个还比较靠谱的方案:
首先在:
- (void)applicationDidEnterBackground:(UIApplication *)application{
}
里面申请backgroundTask
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]
实现一个可以运行几分钟的权限。
然后写一个计时器实时检测 backgroundTimeRemaining
- (void)tik{
if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 30.0) {
[[CKAudioTool sharedInstance] playSound];
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
}
}
方法介绍:
[[CKAudioTool sharedInstance] playSound];这段代码是去播放了一个无声的音乐,很关键的一点是
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]
这样后台播放就不会影响到别的程序播放音乐了。
我这个计时器每分钟运行一次tik函数,如果发现后台运行时间小于30秒了,就再去申请一个backgroundTask。
神奇的地方在于:backgroundTask不能在程序已经进入后台的时候申请,可以用一个播放音乐的假前台状态去申请,所以可以做到不断申请到权限,也就完成了长时间后台执行。
我这边需要在后台跑一个长时间运行的计时器,所以就不能让app进入suspend状态。
很早以前听说可以通过后台播放音乐来实现,借鉴了一下,测试好几天,找出来了一个还比较靠谱的方案:
首先在:
- (void)applicationDidEnterBackground:(UIApplication *)application{
}
里面申请backgroundTask
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]
实现一个可以运行几分钟的权限。
然后写一个计时器实时检测 backgroundTimeRemaining
- (void)tik{
if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 30.0) {
[[CKAudioTool sharedInstance] playSound];
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
}
}
方法介绍:
[[CKAudioTool sharedInstance] playSound];这段代码是去播放了一个无声的音乐,很关键的一点是
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]
这样后台播放就不会影响到别的程序播放音乐了。
我这个计时器每分钟运行一次tik函数,如果发现后台运行时间小于30秒了,就再去申请一个backgroundTask。
神奇的地方在于:backgroundTask不能在程序已经进入后台的时候申请,可以用一个播放音乐的假前台状态去申请,所以可以做到不断申请到权限,也就完成了长时间后台执行。
相关文章推荐
- android Wearable-Accessing the Wearable Data Layer and Syncing Data Items
- iPhone/Mac Objective-C 内存管理教程和原理剖析 [转]
- android Wearable-Sending and Syncing Data
- Android 通知栏Notification的整合全面学习
- Swift和C混合Socket编程实现简单的ping命令&主机发现
- 从无到有:微信后台系统的演进之路
- Android 源码编译过程
- iOS合理利用Local Push和Long-running background task
- iOS中类似九宫格排版数据
- django多个app组织形式
- Android Design Support Library(4)- TabLayout的使用
- android studio 怎么运行java
- android sdk中example如何编译
- <Swift>iOS实现单张图片混带其他参数共同上传
- PC和移动端浏览器同步测试工具Browsersync使用介绍
- Swift百万线程攻破单例(Singleton)模式
- 携程Android App插件化和动态加载实践
- 关于在ios 中断言的使用
- Android同一Activity中不同Fragment设置不同的menu(ViewPager+Fragment)
- Windows搭建Cocos2d-JS环境