iOS后台长时间执行程序,并通过苹果审核、

前言:我们公司项目中有需求:当锁屏状态下需要监听是否有新的订单,然后唤醒手机进行一些逻辑,那么就涉及到如何让app可以在后台更久的运行。

现在项目通过苹果审核了,做了总结方便同学交流。

【A】iOS App 有5种状态:

分别是:Not running , Inactive , Active , Suspended, Background,

Not running:应用还没有启动,或者应用正在运行但是途中被系统停止。

Inactive:当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。

Active:当前应用正在前台运行,并且接收事件。这是应用正在前台运行时所处的正常状态

Suspended:应用处在后台,并且已停止执行代码。系统自动的将应用移入此状态,且在此举之前不会对应用做任何通知。当处在此状态时,应用依然驻留内存但不执行任何程序代码。当系统发生低内存告警时,系统将会将处于 Suspended 状态的应用清除出内存以为正在前台运行的应用提供足够的内存。

Background:应用处在后台,并且还在执行代码。一般的应用,都只会在这个状态短暂停留(最多十分钟),然后就会被系统强制进入 Suspended 状态。而 iOS 为了在某些情况下提供更好的体验,提供了一些选项,只要满足这些选项的条件,就可以在后台运行很长的一段时间,下面我们将重点讨论可以使应用在后台长时间运行的方法。


iOS后台长时间执行程序,并通过苹果审核、_第1张图片

【B】iOS App 后台执行规则:

iOS为了让设备尽量省电,减少不必要的开销,保持系统流畅,因而对后台机制采用墓碑式的“假后台”。除了系统官方极少数程序可以真后台,一般开发者开发出来的应用程序后台受到以下限制:

1.用户按Home之后,App转入后台进行运行,此时拥有180s后台时间(iOS7)或者600s(iOS6)运行时间可以处理后台操作

2.当180S或者600S时间过去之后,可以告知系统未完成任务,需要申请继续完成,系统批准申请之后,可以继续运行,但总时间不会超过10分钟。

3.当10分钟时间到之后,无论怎么向系统申请继续后台,系统会强制挂起App,挂起所有后台操作、线程,直到用户再次点击App之后才会继续运行。

当然iOS为了特殊应用也保留了一些可以实现“真后台”的方法,摘取比较常用的:

1.VOIP   2.定位服务   3.后台下载   4.在后台一直播放无声音乐(容易受到电话或者其他程序影响,所以暂未考虑)

【C】代码解决方案:

使用的是: Long-running background task + 播放无声音乐 双重调起方法。

"长时间运行后台任务",中文应该是这个名字,当我们需要进入后台不暂停程序,就可以给系统说一声 "我需要在后台执行任务了哦~",然后你的 App 就不会被系统挂起,准确来说是延迟暂停,注意这是全局的,意思就是 App 里所有东西都将正常执行,就跟在前台一样。不过系统给你这个权限的时间是有限的。

1 在info.plist添加如下代码

UIBackgroundModes

audio

 

2 在AppDelegate的applicationDidEnterBackground和applicationWillEnterForeground方法添加处理。核心代码:


iOS后台长时间执行程序,并通过苹果审核、_第2张图片
iOS后台长时间执行程序,并通过苹果审核、_第3张图片

3在ViewController里面执行播放默认语音,核心代码:


iOS后台长时间执行程序,并通过苹果审核、_第4张图片

【D】上架审核

这里面是测试demo,我们五秒执行以下弹出本地通知。所以后续如何操作,大家来处理。上架的时候苹果被拒绝了,给出的问题是:


iOS后台长时间执行程序,并通过苹果审核、_第5张图片

我们拍摄了相关后台的视频给苹果,大致意思是:关闭屏幕之后,有新的订单,我们会有一个通知。最后上架成功了。

Demo 下载地址: 

你可能感兴趣的:(iOS后台长时间执行程序,并通过苹果审核、)