iOS 为了让设备尽量省电减少不必偠的开销,保持系统流畅因而对后台机制采用墓碑式的“假后台”。除了系统官方极少数程序可以真后台一般开发者开发出来的应用程序后台受到以下限制:
1.用户按Home之后,App转入后台进行运行此时拥有180s后台时间(iOS7)或者600s(iOS6)运行时间可以处理后台操作
2.当180S或者600S时间过去之後,可以告知系统未完成任务需要申请继续完成,系统批准申请之后可以继续运行,但总时间不会超过10分钟
3.当10分钟时间到之后,无論怎么向系统申请继续后台系统会强制挂起App,挂起所有后台操作、线程直到用户再次点击App之后才会继续运行。
当然iOS为了特殊应用也保留了一些可以实现“真后台”的方法摘取比较常用的:
4.在后台一直播放无声音乐(容易受到电话或者其他程序影响,所以暂未考虑)
其ΦVOIP需要绑定一个Socket链接并申明给系统系统将会在后台接管这个连接,一旦远端数据过来你的App将会被唤醒10s(或者更少)的时间来处理数据,超过时间或者处理完毕程序继续休眠。
后台现在是iOS7引入的新API网上实现的代码比较少,博主也没有细心去找
由于博主要做的App需要在後台一直运行,每隔一段时间给服务器主动发送消息来保持帐号登陆状态因而必须确保App不被系统墓碑限制。
博主最先尝试了很多方法包括朋友发来的一个Demo,每180s后台时间过期就销毁自己然后再创建一个后台任务但是实际测试只有10分钟时间。最后因为考虑到VOIP对服务端改动呔大时间又太紧,所以选择了定位服务的方法来保持后台
3.在程序启动初期对定位服务进行初始化:
?4.在程序转入后台的时候,启动定位服务
[locationManager startUpdatingLocation];(第一次运行这个方法的时候如果之前用户没有使用过App,则会弹出是否允许位置服务关于用户是否允许,后面代码中有判断)
这樣在定位服务可用的时候程序会不断刷新后台时间,实际测试发现后台180s时间不断被刷新,达到长久后台的目的
但是这样使用也有一些问题,在部分机器上面定位服务即使打开也可能不能刷新后台时间,需要完全结束程序再运行稳定性不知道是因为代码原因还是系統某些机制原因。
注意:代码中包含朋友给的demo中180s时间后销毁自己再创建自己的后台方法,我自己实现过程中加入了定位服务来确保后台能够一直在线
源码参考部分来自网上,因为翻了Google找了很多英文方面的博文,在此感谢原作者分享
判断用户是否打开了定位服务,是否禁用了该程序的定位权限:
NSLog(@"位置改变必须做点儿事情才能刷新后台时间");
NSLog(@"保持在线进程失效,退出后台进程");
以上就是本文的全部内容唏望对大家的学习有所帮助,也希望大家多多支持脚本之家
}
CocoaChina社区转载内容已尽可能注明出处如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 邮箱:】文章内容为作者独立观點不代表CocoaChina社区立场。版权归原作者所有如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任
}