iOS 9.3 以上系统版本的迷之卡顿

06/09/2016

作为一名SIF玩家,在不适当的时候弹出一条推送或者收到一个电话绝对有让人摔手机的冲动。但是自从升级到 iOS 9.3 以后,SIF 又出了个新的毛病——迷之卡顿。

不仅仅是日服客户端,盛大版、美服都遇到了这个问题。在不同版本出现了同一问题,我把问题归结为iOS在相关接口和实现上的改动。但是,这种情况的出现没有任何规律可循,不知道什么时候就会卡顿,而不是一直都在卡。(事实上,查阅 iOS 9.3 的 API Differences ,并没有发现 API 实现上的更新,苹果一般也不会在这样的版本里大幅度调整 API)

直到我在城际上玩 SIF,出站的时候突然发生了卡顿,随后屏幕跟着周围光线变得更亮,我开始怀疑这种卡顿的出现和屏幕亮度的自动调节相关。单一变量测试,关闭自动调节屏幕亮度之后,很长一段时间内没有出现卡顿。另外,即使是在不是游戏这种大量消耗资源的应用里,亮度的自动调节也会带来掉帧,这样一来几乎可以确认这个问题的源头了。

只不过,我们并不了解 iOS 9.3 后对屏幕亮度的调节具体做了哪些改变,我只能猜测是它使用了不该使用的资源,如果你对手机的帧率有非常高的要求并可以牺牲亮度调节功能的话(比如玩游戏),可以选择暂时关闭这个功能。

P.S. 关于自动调节亮度和 Night Shift 的一点解释

iOS 9.3 引入了 Night Shift 功能,即在夜间开启防蓝光模式,也就是俗话说的暖屏模式。理论上,降低蓝光有两种解决方案:

  1. 降低亮度
  2. 减弱蓝光

苹果用户应该比较了解,苹果的设备在最低亮度下依然保持着相当高的亮度,这是由屏幕的特性导致的。由此,苹果决定采用第二种方式,让屏幕变暖来解决问题。

你可能会问,是不是屏幕同时要照顾到亮度调节以及变暖才导致了卡顿呢?我认为理论上不是这样的。亮度调节是由屏幕背光板来完成的,而减弱蓝光则是完全让屏幕显示的颜色在 RGB 分布上向 R 倾斜,是由两个机制操作完成的,理论上不会出现互相占用资源的情况。

后续情况

非常不幸的是,6 月 6 日发布的最新测试版 iOS 9.3.3 beta2 中,自动调节亮度依然有掉帧的问题。好在 iOS 10 的预览版就要更新了,我们也只能期待这个问题尽快被解决了。