IOS零碎技术整理(1)-后台运行
这两天做关于离线通知的功能,总结了一点关于这方面的注意点;按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使用
IOS零碎技术整理(1)-后台运行的更多相关文章
- IOS零碎技术整理(3)-获取wifi列表
1. 该功能实现基于MobileApple80211框架来进行开发,而目前该框架成为了私有框架,其中的API均为私有API. 如果使用这些API可能导致应用不能上app store或者ios版本升 ...
- IOS零碎技术整理(2)-隐藏系统Tabbar
原理就是将tabbar移出显示区 -(void)hideSystemTabBar:(UITabBar*) tabbarcontroller { [UIView beginAnimations:nil ...
- 【iOS系列】-程序开启后台运行
[iOS系列]-程序开启后台运行 iOS程序是伪后台的运行,可是有时候我们需要让其在后台也要进行一些操作,我们可以让其伪装成音乐的APP,这样就可以让程序后台进行相关操作了,具体做法如下: 1:在Ap ...
- iOS 和 Android 中的后台运行问题
后台机制的不同,算是iOS 和 Android的一大区别了,最近发布的iOS7又对后台处理做了一定的更改,找时间总结一下编码上的区别,先做个记录. 先看看iOS的把,首先需要仔细阅读一下Apple的官 ...
- IOS高级开发~开机启动&无限后台运行&监听进程
一般来说, IOS很少给App后台运行的权限. 仅有的方式就是 VoIP. IOS少有的为VoIP应用提供了后台socket连接,定期唤醒并且随开机启动的权限.而这些就是IOS上实现VoIP App的 ...
- 原创翻译:iOS 应用程序 蓝牙后台运行
默认情况下,普通的CoreBluetooth 任务中的大多数,无论是Central还是peripheral ,在后台或者挂起状况下都是无法进行的.也就是说,你可以通过宣布你的应用程序支持后台处理模式来 ...
- iOS开发小技巧--iOS程序进入后台运行的实现
iOS程序进入后台运行的实现 视频中看到老师用的iOS7,代码中有开启timer,无限请求数据的功能,但是切换到后台,代码就不打印了 自己用的iOS9,进入后台还是可以打印的,再次进入前台也可以正常运 ...
- ios程序后台运行设置(不是太懂)
文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以, 1.音乐 2.location 3.voip 文 ...
- iOS 后台运行 类型
iOS后台运行,需要有特定的类型才可以进行.这些内容并不是一直不变的,苹果也在逐步的更新这些内容. 本文内容是2015年11月03日时苹果支持的后台运行类型. 这是官方连接地址 其中较为重要的是下面这 ...
随机推荐
- Java—工厂模式
工厂模式: public interface Cookie { public abstract void run (); } public abstract class CookieFactory { ...
- css声明应用优先级
1.特殊性 选择器的特殊值由四部分组成:0,0,0,0 第一位预留给内联样式 <h1 style="color:red;"></h1> 第二位属于ID选 ...
- vue学习笔记
来公司以后就一直在用vue框架,不管是业务代码,还是做vue组件.关于vue有一些点是文档中没有提及的,记录一下以便以后查询- 一.Vue的特点 新一代 Vue.js 框架非常关注如何用极少的外部特性 ...
- 第一次用Axure~
刚刚接触axure感觉好多不会呢~但是一步一步来吧~ 操作到后来发现字体的变化很奇怪,总是只有一个字体出现,只有在编辑时才出现我设定的字体. 但最后还是有个样子出来了~做了一个联系的新页面 最后学姐又 ...
- SharePoint REST Create Folder
function createListFolder(siteUrl, listName, foldername) { var serverUrl = _spPageContextInfo.webAbs ...
- vs2010设置断点进行调试时不起作用
1.打开vs2010 2.点击web下的“属性” 3.点击“生成” 4.点击最下方的“高级” 5.在“输出”-调试信息中选择“full”,点击确定按钮即可
- C# 将对象保存为文件 读取文件并转为对象 压缩文件 解压缩文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- maven - Eclipse构建maven项目
前面的博文已经介绍了如何安装maven,本文将记录如何在Eclipse下构建maven项目. 一.Eclipse maven插件安装 关于安装Eclipse maven插件,网上有很多方法,这里推荐一 ...
- 配置自己的OpenGL库,glew、freeglut库编译,库冲突解决(附OpenGL Demo程序)
平台:Windows7,Visual C++ 2010 1. 引言 实验室的一个项目,用到OpenGL进行实时绘制,还用到一些其他的库,一个困扰我很久的问题就是编译时遇到的各种符号未定义,符号重定义之 ...
- JDBC修改表数据
修改数据时用到update语句,使用这个语句时也要有条件的,指定修改某一行的数据,没有条件判断,则修改全部. package qddx.JDBC; import java.sql.*; public ...