如何实现持久后台运行?

  最近正好在解决后台的问题,看到大家在讨论网易公开课为什么可以后台下载?远远超过系统默认的后台时间600s,当时也觉得十分好奇,正好手机上装的有网易公开课,就拿到了网易公开课的ipa文件,分析了一下它的info.plist问题,发现毫无特殊之处,甚至没有指出后台任务的模式,一般都要指定music或者voip,所以深感诧异。当时便跟同时讨论了这件事情,都觉得很特别,但是也都相信肯定是用了某种我们不熟悉的技术,大家都在怂恿我给网易公开课的工作人员发封邮件请教一下,我呢还是决定先研究一下,然后再请教。

  在想了一夜之后,第二天上午突然一到灵光乍现。这里在讲我的解决方案之前首先描述一下当前的两种持续后台的技术:music和voip。

  1.music,在于它的简单好用,只用播放一端无声问题,在可以持久后台运行,但是它有一个致命的缺点,很容易被中断,中断后很难被恢复,在我的前几篇文章中都在尝试解决中断后继续运行的问题,所以深知这个的麻烦。尤其是当被其他播放器中断的时候还收不到中断结束的回调,所以无法恢复执行。所以这个方案呢缺点多多,坑也很多,虽然上手简单。

  2.voip,这个我不了解,咱主要是搞music player的,通过大家的介绍,了解到这个技术可靠性比较强,可以保持长久的后台的持续运行。

  至于我的解决方案呢,因为我主要集中在music player这块所以主要集中在通过后台播放无声文件来实现持续后台,通过我刚开的分析,大家也看到了这里很多坑,恢复播放比较麻烦。尤其是被其他音乐播放器中断后几乎无法恢复播放,也就没有所谓的后台运行了。我的灵光一闪就出现在既然各种各样的中断这么难于处理,那么就不让它被中断呗,是的,不被中断!你没有看错,看过我前面文章的同学都知道audio session有这么一个属性kAudioSessionProperty_OverrideCategoryMixWithOthers,打开这个属性就可以保证你的播放器不会被其他播放器中断,可以跟其他的播放器同时播放,永远不会被挂起,甚至不需要处理中断。至于打接电话和由于录像是否会导致被中断,尚未验证,个人认为应该不会被中断,即使被中断,因为这两种情况导致的中断也很好处理。所以就可以持续的后台运行了。

原文地址:https://www.cnblogs.com/CoderPlace/p/3234640.html