iOS程序后台无限运行

让我们的应用一直在后台运行不被系统kill掉,这种需求并不多见。在我呆的上家公司里,期间有段时间研究了很多稀奇古怪的问题,比如safari和app互通、监测当前手机打开哪些程序、监测手机app各自运行时间、程序一直运行不被系统杀死等等很多,当然有些并没有研究出结果,也许本来就实现不了。这个后台无限运行,想上App Store肯定是会被拒的,在用企业证书分发的app有些可能会用到,之前用到这个的场景是因为积分墙刷榜,这个程序要在后台一直运行,来监测其他app的行为,如注册、登陆、认证等,这就要这个app持续运行。鉴于苹果对iOS系统的封闭政策,我们的APP在进入后台能做的事情相对有限。一般只有几秒的时间留给用户进行一些清理和数据保存的时间,当然可以使用开启新任务向系统借点时间,但这时间也是有限的, 不会超过10分钟,10分钟后无论怎么向系统申请继续后台,系统会强制挂起App,挂起所有后台操作、线程,直到用户再次点击App之后才会继续运行。但是系统也预留了一些特殊应用可以实现真后台的方法,包括VoIP、GPS、Audio等。

这里使用了MMPDeepSleepPreventer类,这个类就是通过一直播放无声音乐来实现永久后台运行。一般来说在播放音乐的时候,如果打开其他播放音乐的应用,那之前的音乐就会被关闭,但是MMPDeepSleepPreventer这个类使用了定时器每5秒播放一次,所以不会被中断,除非手动kill掉项目。

下载链接:https://github.com/ChinaFishNews/MMPDeepSleepPreventer.git

把上述问价导入项目,添加AVFoundation.framework、AudioToolbox.framework

在Info.plist中设置添加Required background modes键值,设置为App provides Voice over IP services

另外在Bulid Phases中将MMPDeepSleepPreventer.m类设置为-fno-objc-arc

然后需在AppDelegate中设置

1
2
#import <AVFoundation/AVFoundation.h>
#import "MMPDeepSleepPreventer.h"

1
2
MMPDeepSleepPreventer * soundBoard =  [MMPDeepSleepPreventer new];
[soundBoard startPreventSleep];

如有任何疑问或问题请联系我:fishnewsdream@gmail.com,欢迎交流,共同提高!

Objective-C/Swift技术开发交流群201556264,讨论何种技术并不受限,欢迎各位大牛百家争鸣!

微信公众号OldDriverWeekly,欢迎关注并提出宝贵意见

老司机iOS周报,欢迎关注或订阅

刚刚在线工作室,欢迎关注或提出建设性意见!

刚刚在线论坛, 欢迎踊跃提问或解答!

如有转载,请注明出处,谢谢!

本站总访问量 本文总阅读量