资讯专栏INFORMATION COLUMN

iOS 前后台机制以及后台唤醒机制【个人学习】

BlackMass / 1164人阅读

摘要:前后台机制以及后台唤醒机制前台机制按照苹果的要求,一个在完成相应的操作后,应该及时释放或停止对硬件或系统功能的控制。上架审核苹果对后台功能要求很严格,要求开发能不用后台就不要用。

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

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

后台机制

iOS的后台机制共有三种:

Background Tasks(后台任务):APP在前台时启动某项任务,然后在未结束之前突然切换到了后台,那么APP可以在切换回调里使用某些API继续向系统请求一些时间来继续完成这个任务;完成之后通知系统,之后系统会将APP挂起。

Downloading(下载):在后台启动从网络下载文件的任务。对于文件下载,iOS有专门的机制。

Specific Background Tasks(特殊后台任务):应用需要在后台一直执行代码,长时间运行。

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

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

第三种特殊后台情况比较多了:

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

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

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

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

上架审核

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

如果一定要用后台功能,需要给出说明和解释,让审核人员清楚地知道,app的哪个功能用到了后台模式。尤其是后台定位功能,因为涉及用户隐私,审核非常严格。

常用软件是怎么做的

绝大部分软件是遵守苹果开发规范的,但是还是有一些app由于设计不良或出现bug,导致耗电量很大:

常见的是在进入后台时,或在前台但屏幕熄灭时,未能及时停止某些耗电操作(比如下载和定位),导致耗电。

app为了追求动态化使用了大量web技术,也会导致耗电增大。

后台存取(后台应用刷新)过于频繁,耗电增大。比如在系统设置界面,可以看到微信有个后台应用刷新开关,如果打开这个开关,那么微信在收到新消息推送后,在后台就可以更新消息,直接打开微信就能看到了;如果关闭这个开关,收到新消息后,可以在推送栏看到消息,但打开微信后还需要联网重新下载完整消息。

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


后台作弊方式

由于iOS后台机制的限制,以前要想在后台运行,可以申请后台权限后,模仿音乐播放器,在后台循环播放一段无声的音乐,这样就可以一直运行在后台,直到内存不足被系统杀死。

利用后台存取(后台应用刷新)功能。正常情况下,声明了这个类型之后,系统在你的 APP 进入后台后,间隔性的给机会将你的 APP 唤醒,唤醒后再通过beginBackgroundTaskWithExpirationHandler:向系统申请一段时间,然后再重复申请一段时间,就可以长时间在后台运行。而且被杀死后还有可能被系统重新唤醒。

但是,现在iOS10和iOS11之后,这些方法也很难骗过审核人员和iOS系统的后台唤醒机制了。

iOS

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17052.html

相关文章

  • Android移动客户端性能测试浅谈——电量

    摘要:性能测试除了需要监控内存占用流量等,还需要获取的电量数据,测试在可接受范围内,避免出现过度消耗电量的现象。这一栏显示了不同的充电方式对电量使用的影响。 本文由作者张迎贞授权网易云社区发布。 APP性能测试除了需要监控PCU、内存占用、流量等,还需要获取APP的电量数据,测试在可接受范围内,避免APP出现过度消耗电量的现象。手机有很多硬件模块:CPU,蓝牙,GPS,显示屏,Wifi,射频...

    Airy 评论0 收藏0
  • Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理

    摘要:在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是在后台被系统杀死,再次恢复的时候遇到了问题,而在使用的时候会更加频繁。 showImg(https://segmentfault.com/img/remote/1460000008069737); App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了...

    B0B0 评论0 收藏0
  • iOS开发基础篇--NSNotificationCenter使用小结

    摘要:所以使用的情况是两者有直接的关系,至于一方知道另一方的存在。这是一个我的交流群,群文件自行下载,不管你是小白还是大牛热烈欢迎进群,分享面试经验,讨论技术,大家一起交流学习成长希望帮助开发者少走弯路。 前言 最近公司组织两个星期的新人培训,事情安排的满满的,周末都没有。说好的一个星期一更新的博客中断了,让大家久等了,现在培训结束,终于又可以安安静静的做一个程序员了,好开心。。。 一、NS...

    dmlllll 评论0 收藏0
  • Android APP性能调优 一本正经的胡说八道的前言

    摘要:一本正经地胡说八道用日语怎么说大概是真面目吧。设计的话,我从来就没有遇见过拿安卓手机的。我个人觉得卡顿问题大致有以下的原因。这一系列的工作,造成了开发商无法在发布的新版本之后迅速升级自家设备的系统。也不是产品经理的锅,而是大环境造就的。 一本正经地胡说八道用日语怎么说?大概是「真面目にふざけている」吧。这篇日志大概就是这么一个意思? 一直以来都想对Android APP开发的性能调优做...

    zilu 评论0 收藏0
  • h5唤醒APP小记

    摘要:比如联系方式银行卡信用卡信息支付宝各大商城的账户密码照片甚至行程与位置信息等。针对这个问题,苹果使用了名为沙盒的机制应用只能访问它声明可能访问的资源。 h5唤醒APP功能 最近遇到一个需求,需要在从APP分享出去的H5页面中,带有一个立即打开的按钮,如果本地安装了app,那么就直接唤起本地的app,如果没有安装,则跳转到下载。这是一个很正常的推广和导流量的策略。前端小白从来没有做过这个...

    KnewOne 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<