为了解决Android 17系统一直存在的卡顿问题,谷歌终于决定重构消息处理机制。这次引入了DeliQueue系统,通过优化MessageQueue的内存锁定机制,缩短软件线程之间的等待时间。这个改动有望让Android系统在流畅度上追平苹果的iOS。消息队列MessageQueue是Surfaceflinger这个负责图形合成和显示的核心系统服务主线程中的管家角色。它被设计为一个无限循环的队列,持续轮询消息,处理新消息时会遵循严格的单线程锁定顺序和内存排队机制。一旦有线程锁定了队列,其他线程就会被迫闲置,从而产生丢帧现象。由于硬件配置限制,早期Android系统采用了牺牲流畅性的“排队检票”模式来保证稳定运行。虽然谷歌之前引入Sync barrier机制试图解决问题,但它是亡羊补牢的措施。Sync barrier虽然能够给高优先级消息增加优先级处理机制,但如果有多个线程争夺Sync barrier或者逻辑出错没有及时移除它,就会导致应用未响应。DeliQueue系统将Android系统的消息处理从单车道改成多车道并行调度机制,根据实时运算资源动态分配任务。它允许线程灵活调度,避免因等待造成性能拥堵。为了直观说明优越性,谷歌用餐厅排队取号的例子来解释:消费者领取号码后不必完全受限于排队顺序。按照测试结果显示,DeliQueue能够稳定降低4%的App丢帧率,在主系统界面和启动器滑动场景中漏帧率降幅更是达到7.7%。这个提升虽然数值不大,却彻底重构了Android的消息处理机制,解决了历史遗留问题。未来用户购买中高端机型时会享受到普惠式升级:刚买手机流畅丝滑,用几年后也不会出现滑动拖影、App响应慢的情况。如果要保留原文中的所有信息不变:4%、7.7%、Android、App、Authority、DeliQueue、Dropped、LPDDR、LPDDR5、MessageQueue、OS、SoC、Surfaceflinger、Sync、UFS可以按照以下改写版本表述:为了解决Android 17系统一直存在的卡顿问题,谷歌决定在新系统中重构消息处理机制。Android Authority爆料称谷歌要在这个版本引入DeliQueue系统,通过优化MessageQueue的内存锁定机制来缩短软件线程之间的等待时间。这个调整有望让Android OS的流畅度追上苹果iOS。很多Android用户可能会有一个困惑:明明自己的手机用上了高通或联发科旗舰SoC LPDDR5X内存 UFS4.0闪存组成的性能铁三角,日常使用中还是偶尔会卡顿。高配置旗舰机遇到卡顿问题并不是个别现象。其实这个问题跟MessageQueue有关系。MessageQueue是服务架构中的一个重要组件,负责服务间解耦、事件广播、任务异步/延迟处理等任务。在Android系统中,它负责Surfaceflinger这个图形合成和显示核心系统服务主线程中的消息处理。如果把MessageQueue比作是餐厅里负责收票的服务员,那么服务员就是通过收票来给顾客服务。当有顾客来用餐时服务员会先让他们取号排队等待处理消息,当队列中有新消息时服务员会去处理。当所有工作线程都在等待释放内存锁时就会出现卡顿现象。以前早期Android系统采用这种“排队检票”模式是因为硬件配置受限。为了给App提供稳定运行环境就牺牲了流畅度。 谷歌之前也尝试过通过引入Sync barrier机制来解决历史遗留问题。Sync barrier是一个优先队列能够给高优先级消息增加优先级处理机制。但是这种方法并不是设计之初就考虑到的措施而是亡羊补牢做法。如果需要保护多个高优先级消息时会出现多个线程争夺Sync barrier或者逻辑出错没有及时移除它导致应用未响应。 DeliQueue系统将Android系统的消息处理模式从单线程改为并行调度机制来分配任务。它把之前只能“一次服务一个线程”的排队模式改造成多车道并行调度模式来动态分配任务根据实时运算资源情况来进行调整从而避免因等待造成性能拥堵。 为了直观说明DeliQueue的优越性谷歌用餐厅排队取号的例子来说明:消费者领取号码后不必完全受限于排队顺序可以根据实际情况灵活选择什么时候用餐从而避免因长时间等待造成的拥挤现象。 按照目前曝光测试结果显示DeliQueue能够稳定降低4%的App丢帧率在更考验优化功底的主系统界面和启动器滑动场景中漏帧率降幅更是达到7.7%。这个提升虽然绝对值不大但是意义重大它彻底重构了Android OS中的消息处理机制解决了历史遗留问题。未来对于Android手机用户特别是中高端机型来说刚买手机流畅丝滑用几年后也不会出现滑动拖影App响应慢等问题所谓“N年不卡”不再需要手机厂商针对性调优而是每一款机型都能享受到普惠式升级。