iOS 先后台机制以及后台唤醒机制【我的学习】

iOS 先后台机制以及后台唤醒机制

前台机制

按照苹果的要求,一个APP在完成相应的操做后,应该及时释放或中止对硬件或系统功能的控制。好比,一个APP须要根据不一样的城市显示不一样的首页内容,那么应该在获取到手机的当前城市后,主动中止定位。web

后台机制

iOS的后台机制共有三种:微信

  • Background Tasks(后台任务):APP在前台时启动某项任务,而后在未结束以前忽然切换到了后台,那么APP能够在切换回调里使用某些API继续向系统请求一些时间来继续完成这个任务;完成以后通知系统,以后系统会将APP挂起。
  • Downloading(下载):在后台启动从网络下载文件的任务。对于文件下载,iOS有专门的机制。
  • Specific Background Tasks(特殊后台任务):应用须要在后台一直执行代码,长时间运行。

先说第一种后台任务,其实就是一个APP刚退到后台时,能够向系统申请一段时间(通常几十秒)来处理一些任务,等任务处理完成再被系统挂起。好比一个地图软件,下载离线地图后,正在安装,用户此时按了Home键,那就能够向系统申请一段时间等安装完成后,再挂起。若是耗时超过系统限制,会被强制清理。网络

第二种后台下载,必须使用iOS指定的机制才能够,那就是NSURLSession来建立后台下载,即便你的APP已经进入后台,或被系统杀掉了,当下载完成时,系统会唤醒APP来处理下载好的文件。不少杂志类的应用会有这种功能。app

第三种特殊后台状况比较多了:人工智能

1. 须要在后台播放音频。如音乐播放。会一直运行;
2. 须要在后台录音;会一直运行;
3. 在后台也须要不断通知用户位置变更的;好比导航APP会一直在后台运行,但地理围栏APP只会在进入和退出指定位置时唤醒APP;
4. 支持VoIP电话的,如Skype网络电话;会在有电话时被系统唤醒;
5. 须要在后台有规律的下载和处理网络内容的;会在指定时间或网络条件下被系统唤醒;
6. 在后台有规律的从其余外设(第三方配件)获取并更新数据的;会在收到配件消息时被系统唤醒

后台唤醒注意事项

还须要注意的是,那些被系统后台唤醒的app并非无限制的,大部分状况下被唤醒后只有10秒时间来处理任务,超时未完成处理会被系统强制挂起。设计

iOS为了控制后台任务,使用了AI技术,依靠人工智能来判断一个app应不该该被唤醒,唤醒频率是多少。已经不是你的app想要唤醒就能唤醒的了,若是手机电量不足或者被唤醒后你的app没有联网存取一些数据,或者老是超时被强制结束,那就不会再被唤醒code

还须要注意的是,绝大多数状况下,系统不会重启被用户手动强制关闭的 APP,但在 iOS 8 以后, location apps (地理围栏等)是个例外。其余的全部被用户手动强制关闭的APP 都不会被系统主动唤起,直到用户再次主动启动这个 APP,或者手机重启并在用户输入了解锁密码以后才会恢复机制。内存

上架审核

苹果对后台功能要求很严格,要求开发能不用后台就不要用。ci

若是必定要用后台功能,须要给出说明和解释,让审核人员清楚地知道,app的哪一个功能用到了后台模式。尤为是后台定位功能,由于涉及用户隐私,审核很是严格。开发

经常使用软件是怎么作的

绝大部分软件是遵照苹果开发规范的,可是仍是有一些app因为设计不良或出现bug,致使耗电量很大:

  • 常见的是在进入后台时,或在前台但屏幕熄灭时,未能及时中止某些耗电操做(好比下载和定位),致使耗电。
  • app为了追求动态化使用了大量web技术,也会致使耗电增大。
  • 后台存取(后台应用刷新)过于频繁,耗电增大。好比在系统设置界面,能够看到微信有个后台应用刷新开关,若是打开这个开关,那么微信在收到新消息推送后,在后台就能够更新消息,直接打开微信就能看到了;若是关闭这个开关,收到新消息后,能够在推送栏看到消息,但打开微信后还须要联网从新下载完整消息。

另外还有一些软件,故意钻空子,利用技术手段做弊,强行运行在后台,达到某些目的。尤为在iOS10以前的系统上很常见。


后台做弊方式

  • 因为iOS后台机制的限制,之前要想在后台运行,能够申请后台权限后,模仿音乐播放器,在后台循环播放一段无声的音乐,这样就能够一直运行在后台,直到内存不足被系统杀死。
  • 利用后台存取(后台应用刷新)功能。正常状况下,声明了这个类型以后,系统在你的 APP 进入后台后,间隔性的给机会将你的 APP 唤醒,唤醒后再经过beginBackgroundTaskWithExpirationHandler:向系统申请一段时间,而后再重复申请一段时间,就能够长时间在后台运行。并且被杀死后还有可能被系统从新唤醒。

可是,如今iOS10和iOS11以后,这些方法也很难骗过审核人员和iOS系统的后台唤醒机制了。

iOS

相关文章
相关标签/搜索