总所周知ios系统为了让设备省电,减少不必要的进程和内存 保持系统流畅性 采取周密的后台机制进行管理.
查阅过很多其他的开源blog都没有一个详细的答案和步骤
除了极少数的官方app有真后台外,一般开发者都受到苹果后台管理机制的限制.
1.用户按home键后,app进入background模式运行.此时系统会分配1-3分钟的后台运行时间进行后台操作.
2.当时间到达后如果此时app仍有任务进行 后台将会根据设备内存 电量 温度分配更多的后台时间给app
3.任务:任务指的是特定的位置定位 , 音频播放 后台下载等.
下面进入主题 下面这两种方面真正实现后台长驻PS:使用的是logos语法 oc的逆向 正向开发按实际需求套入即可
第一步 在Capabilities中打开background模式并勾选以下三种
第二步 在info.plist中添加Privacy - Location Always and When In Use Usage Description(key) 请选择始终允许后台获取定位(value)
第三步 在Appdelegate下新建获取定位方法并发送请求定位许可
注意 log是打印任务必须使用NSTimer循环调用保证后台定位任务不会停止因为没有任务而停止
第四步在didFinishLaunchingWithOptions:方法下调用comeToBackgroundMode
一定有小伙伴很奇怪为什么要在这个方法里面调用 那岂不是每一次启动app都会调用吗 耗费内存.其实这里可以只请求定位许可 不过要记住在app返回后台 按home键前一定要调用一次定位更新方法不然后台机制会在3分钟后杀掉app 我这里为了方便直接每次启动都调用一次 小伙伴可自行根据需求修改代码
第五步在applicationDidEnterBackground里面再次调用startUpdatingLocation方法
applicationDidEnterBackground方法存在于Appdelegate之下作用是app返回后台后调用这一步千万不可少不然就没效果了
最后就可以愉快的运行开效果啦记住请求许可的时候要选择始终允许定位哦.如果选择仅在应用期间使用的话状态栏会出现蓝色的背景提示哦.
第二种方法后台播放无声音乐
其实这个原理类似于qq音乐和网易云音乐一样 没有主动退出app都是一直在后台运行如果我们一直播放无声音乐那app也一直可以长驻于后台
第一步新建全局对象和新建播放无声音乐方法
第二步在applicationDidEnterBackground调用player播放方法至于方面原理上面已经说了就不重复了
播放无声音乐长驻后台就完成了 不过不建议大家使用因为可能会和其他app起冲突