相信不少Android用户都会有一种困惑,那就是明明自己的手机已经用上高通/联发科旗舰SoC+LPDDR5X内存+UFS4.0闪存的“性能铁三角”,可日常使用中还是偶尔会卡顿。在即将到来的Android 17上,谷歌方面终于决定修复这个困扰用户许久的顽疾了。

日前海外科技媒体Android Authority爆料,谷歌将在Android 17引入DeliQueue系统,通过优化MessageQueue(消息队列)的内存锁定机制,从而缩短软件线程之间的等待时间。按照海外开发者的说法,谷歌这一调整极有可能会让Android系统在流畅度上追平苹果的iOS。
先来说说,为什么配置再高的Android旗舰机会不可避免地遇到卡顿问题。其实Android系统卡顿的“病根”就是前文提到的MessageQueue,这是服务架构中常见的组件,用于服务间解耦、事件广播、任务异步/延迟处理等,在Android系统中它扮演了Surfaceflinger(负责图形合成和显示的核心系统服务)主线程中消息处理的“管家”角色。

MessageQueue在Android系统中被设计为一个无限循环的队列,会持续轮询消息,当有新的消息时就去处理,否则就等待。可问题在于,MessageQueue处理消息时必须遵循严格的单线程锁定顺序、来排队访问内存,所有工作线程必须按顺序等待内存锁释放才能执行任务。
换而言之,一旦某个线程锁定了队列,其它线程便会被迫闲置,进而产生被迫丢帧(Dropped frames)现象,大家就会感受到滑动屏幕时出现不跟手、视觉拖影等卡顿现象。在早期的Android系统中,由于硬件配置的限制,“排队检票”的MessageQueue模式以牺牲流畅性的代价保证了系统稳定运行。

当然,谷歌此前也不是没有尝试解决这个历史遗留问题,并为Android引入了Sync barrier(同步屏障)机制。Sync barrier是一个优先队列,会给要处理的消息加一个优先级机制,其中特别是关于UI渲染的消息,从而确保Android系统的屏幕绘制更流畅。
可问题在于,Sync barrier是典型的亡羊补牢措施,并不是在设计之初就考虑到的东西。当Sync barrier需要保护的消息被处理后,就需要调用者(通常是App)来手动移除它。假如要处理的高优先级消息过多,多个线程一起争夺Sync barrier,或是逻辑出错、Sync barrier没有被移除,消息队列就会停止工作,App则出现应用未响应状态。

谷歌在Android 17上将要推出的DeliQueue系统,是从以往“一次服务一个线程”的排队模式改为了并行调度机制,会根据实时运算资源动态分配任务。简而言之,DeliQueue将Android系统的消息处理从单行道改为多车道,其中负责UI界面渲染的高优先级消息可以快速通行。
为了更直观地说明DeliQueue的优越性,谷歌还用“餐厅排队取号”的例子来进行了解释,消费者在领取号码后,取餐顺序不必完全受限于排队顺序。也就是说DeliQueue允许线程根据实际资源情况灵活调度,从而避免因等待而造成的性能拥堵。
按照目前曝光的测试结果,DeliQueue能让App丢帧率稳定降低4%,在更考验优化功底的主系统界面和启动器滑动场景中,漏帧率的降幅更是达到了7.7%。虽然DeliQueue带来的提升从绝对值来看并不大,但它的意义在于重构了Android的消息处理机制,彻底解决了历史遗留问题。

未来对于Android手机的用户,特别是中高端机型来说,刚买手机时流畅丝滑,用了一两年就开始出现滑动拖影、App响应慢的情况几乎将不会再发生。所谓的“N年不卡”不再需要手机厂商针对性调优,而是每一款机型都能享受到的普惠式升级。
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 203304862@qq.com
本文链接:https://jinnalai.com/jiaodian/813245.html
