EN

Android 新的流畅体验,90Hz 漫谈

字数统计: 3.3k阅读时长: 11 min
2019/05/15
loading

版本说明(2026-10-13 核查):本文写于 2019 年,机型评价、“90 Hz 是当时较好选择”和购机展望保留为历史看法,不是当前购买建议。下文修正刷新率、帧率和输入处理的解释,补充 Android 11/API 30 与 Android 15 QPR1 等版本的变化。原 Trace 裁图没有完整采集条件,不作为新设备实测。

PC 上高刷新率屏幕很早就出来了,但是 Android 上高刷新率屏幕出现在 Android 手机上还只是这两年的事情,尽管雷蛇在 2017 年就推出了 120Hz 屏幕的手机,但是反响平平;而个人认为今年努比亚的红魔 3 和 OnePlus 的 7 Pro 推出的 90Hz 的屏幕才是 Android 手机目前这个阶段最好的选择,也是目前能显著提升用户体验的一个点。对高刷新率屏幕没啥概念的,可以去苹果体验店体验一下 120Hz 刷新率的 iPad Pro。

硬件时间点可以对照厂商资料:初代 Razer Phone 于 2017 年发布 120 Hz 屏幕,2018 年的 Razer Phone 2也支持 120 Hz。OnePlus 7 Pro和红魔 3则是本文讨论的 2019 年 90 Hz 机型。iPad Pro 的 ProMotion 在 2017 年已支持最高 120 Hz。这些规格不能替代具体场景的帧率测量。

技术术语解释

什么是屏幕刷新率 ?

屏幕刷新率描述显示更新的频率,单位是 Hz。固定在 60 Hz 模式时,每秒有约 60 次刷新机会;固定 90 Hz 时约为 90 次。没有新内容时,同一画面可以被重复显示,所以“屏幕刷新了”不等于“应用产生了一个新画面”。

它受显示硬件能力限制,也受系统选择的显示模式和策略影响。手机标称最高 120 Hz,不代表所有时候都以 120 Hz 工作;动态刷新率也不能用一个永久固定的周期描述。

什么是 FPS ?

FPS 是 Frames Per Second,即每秒帧数。使用这个指标时要说明统计的是应用生成、提交,还是最终呈现的帧;不同位置测出的值可以不同。帧率取决于软硬件、内容负载和调度,不宜简单称为只由软件决定。

平均 90 FPS 也不能证明每帧都均匀,相邻帧的间隔和输入到显示的延迟同样影响体验。静止页面没有持续生成新帧,通常是正常的节能行为。

什么是 Vsync ?

Vsync 是 Vertical Synchronization(垂直同步)的简称。在 Android 显示流程中,它用于协调应用渲染、SurfaceFlinger 合成和显示更新的节奏;它不会自动把应用 FPS 变成屏幕刷新率。

固定刷新模式下,周期可以用 1000 / 刷新率 算出:

刷新率 刷新间隔
60 Hz 约 16.67 ms
90 Hz 约 11.11 ms
120 Hz 约 8.33 ms

这些是刷新间隔,不是“任意一段绘制代码低于这个数就一定不掉帧”的保证。应用、GPU、合成和显示可以流水执行,阶段起点、相位、队列和完成截止时间都要一起看。AOSP 的 Vsync 说明描述了应用与 SurfaceFlinger 信号相对硬件 Vsync 的相位关系。

什么是 Input 扫描周期 ?

触摸扫描是触控硬件采样,事件读取、分发和应用消费则是后续步骤。扫描率随设备、模式和负载变化,原文“约 8 ms”不能代表所有手机;8 ms 对应约 125 Hz,也不是 120 Hz 的精确周期。

即使假设严格每 8 ms 采一次,按相位划分的 16.67 ms 窗口也可能包含 2 或 3 个采样,11.11 ms 窗口可能包含 1 或 2 个。这个数量差异本身不证明画面一定不均匀,还要看样本时间戳、合并、重采样和消费方式。

例如,Android 9 的 InputTransport包含批处理和触摸重采样;Android 16 的 BatchedInputEventReceiver既有安排到 CALLBACK_INPUT 的批量消费,也有关闭 batching 后直接消费的路径。不能概括为“所有输入只有 Vsync 到来才处理”。

90Hz 用户体验

对滑动和动画来说,90 Hz 屏幕持续呈现节奏均匀的 90 FPS 内容,通常比同条件的 60 FPS 更新更细密。不过,刷新率与内容帧率不必始终相等:30 FPS 内容在 60 Hz 上每帧显示两个刷新周期,也可以有稳定节奏。

如果屏幕固定 90 Hz、内容固定 60 FPS,两者不是整数倍关系,帧的显示时长可能交替变化,带来 judder(节奏不均)。屏幕若能切到 60 Hz 或合适的整数倍模式,可以改善这种匹配。反过来,60 Hz 屏幕无法完整呈现每秒 90 个独立更新;多生产的帧可能被替换、丢弃或让队列阻塞,具体取决于缓冲和呈现策略,不能只用“必然丢帧”概括。

原文“Android 架构和硬件不足以支持 120 Hz + 120 FPS”的判断过于绝对。2017 年已存在 120 Hz Android 设备;是否能在具体场景稳定输出 120 FPS,要看应用负载和整机实现,不能由平台名或芯片型号直接判断。对 2020 年的预测现在已是历史展望,不能继续当作未来购机建议。

原文的 OnePlus 90 Hz 与 60 Hz 对比视频作为当年的演示入口保留。拍摄、编码、播放帧率以及观看屏幕都会影响观感,宣传视频不能代替受控的帧时间和延迟测试。

从系统角度来看 90fps 的工作原理

以使用硬件加速 View/HWUI 的界面为例,主要流程是:

  1. 输入、动画或其他状态变化产生更新需求,不限于用户点击。
  2. 输入事件分发到应用,应用处理业务或更新列表状态。
  3. Choreographer 安排相应回调;只有需要时才进行遍历,内容变化也不一定每次都触发完整 measure、layout、draw。
  4. 主线程记录/更新绘制状态,RenderThread 执行相关渲染工作并提交缓冲;CPU 方法结束不等于 GPU 已完成,缓冲是否可用还受同步机制约束。
  5. SurfaceFlinger 接收图层缓冲并协调合成,可能使用 GPU 客户端合成或 HWC 设备合成,再由显示硬件呈现。不是所有图层都由 SurfaceFlinger 的 CPU 主线程逐像素画完。

见 SurfaceFlinger 与 WindowManager。90 FPS 与 60 FPS 的主要流程相似,但游戏、自有 Surface 和不同系统版本会有不同渲染路径,不能把所有应用都套进同一张 HWUI 图。

90fps 下 App 的渲染流程

90fps 下 App 的渲染流程

Systrace 时间线从左到右。原图标的是 android.contacts(PID 9952),选区显示 10.891 ms;它是鼠标所选区间,不能据此证明某帧从输入到显示只花了这个时间,也不应替代名义 90 Hz 周期 11.11 ms。

图中文字需要补充两点:Input、Animation、Traversal 是 Choreographer 的不同阶段,performTraversals() 不是它们的共同容器;图中的 DisplayPlayList 应为 DisplayList,主线程记录绘制信息与 RenderThread/GPU 执行也不是同一件事。

90fps 下 SurfaceFlinger 的渲染流程

90fps 下 SurfaceFlinger 的渲染流程

这张图的选区约 11 ms,可见图层标签 com.oppo.market/...,并不是上一张联系人应用的同一条连续调用链。StatusBar#0 是图层名称,不是 SystemUI 进程行;VSYNC-app 与 VSYNC-sf 展示不同阶段的节奏,可能存在相位差。

合成提交也不等于屏幕已经完成呈现。两张图保留为当年的流程示意;没有完整 Trace 和设备条件,不能从它们计算端到端延迟或整机掉帧率。

90fps 的优势和挑战

优势

下面保留的是 2019 年的个人体验和选购看法。前两条的“不可逆”是主观感叹,不能当成已验证的生理规律;第三条的当年购机建议已过期。感受因人和场景而异,标称刷新率也不保证输入延迟和帧节奏都更好。

  1. 90fps 会带来更加顺滑的用户体验, 60fps 的时候, 1s 才更新 60 张图,这 60 张图在 1s 内顺序播放从而让人的视觉认为是连续的画面在播放, 但是人眼会比较挑剔, 所以当看多了 90 fps 的画面, 即每秒播放 90 张画面的时候, 再回去看 60 fps 就会觉得卡顿, 不连贯.
  2. 高刷新率屏幕使用习惯了,会没法适应低刷新率的屏幕,这是一个不可逆的过程,在挑选手机的时候需要注意这一点。
  3. 另外随着用户更换手机的频率变低,买一台一步到位的手机还是比较重要的,顶级屏幕 + 大电池 + 顶级 SOC + UFS + 大内存。今年下半年会有不少这样的机器出现,目前还在观望的同志可以再等等。

挑战

性能。 从 60 Hz 提高到 90 Hz,目标更新间隔缩短了,但实际瓶颈可能在主线程、RenderThread、GPU、内存带宽、合成或资源等待,不能固定排成“CPU 第一、I/O 第二、GPU 第三”。Snapdragon 855、UFS 3.0 是 OnePlus 7 Pro 的配置,不是实现 90 FPS 的普遍必要条件;存储在资源加载时可能影响表现,却不是每帧必经的计算门槛。也不能在没有对应测试的情况下,把 Razer Phone 的体验全部归因为芯片不够快。

三缓冲能够改善流水线利用率,也可能增加排队延迟,不能保证偶尔超过帧截止时间仍然无卡顿。排查时应结合实际帧时序与呈现;Android 12(API 31)起可参考 Perfetto FrameTimeline,而不是只比较一根 CPU 柱子是否低于 11.11 ms。

功耗。 在其他条件接近时,更频繁的渲染与显示更新通常增加功耗,但幅度取决于面板、内容、亮度、渲染负载和热状态。减少渲染分辨率可能减轻部分 GPU/带宽负担,却不等于改变了物理屏幕,也不保证固定比例省电。静止界面或低帧率内容可以降低更新频率,没必要始终让全系统跑满 90 FPS。

App 适配。 常规框架动画通常跟随系统安排的帧回调,但固定写死 16 ms 的逻辑、自有渲染循环和重负载仍需调整。游戏应按目标帧率安排生产和提交节奏;WebView、SurfaceView 只是承载方式,最终还要看其内容与渲染器,不能笼统说它们支持或不支持 90 FPS。

现代 Android 的适配入口

  • Android 11 / API 30: Surface.setFrameRate()用于表达内容的目标帧率,系统结合显示能力、其他图层和电源策略决定实际模式。它不强制成功,也不会自动把应用渲染循环提速或限速。固定帧率视频可使用 FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,普通游戏等内容使用 DEFAULT;不要每帧反复设置。
  • 游戏帧节奏: Android Frame Pacing(Swappy)帮助协调 OpenGL/Vulkan 帧的提交与显示节奏。请求高刷新率、按时产出帧和持续保持性能是不同任务,都要测量。
  • Android 15 QPR1 及以上: 自适应刷新率 ARR还要求设备实现相应 HAL 支持,不是升级系统后所有面板自动获得同样能力。显示刷新率可以随内容变化,普通应用也不必把静止画面持续重绘成 90/120 FPS。

开发者选项的“显示刷新率”展示显示模式信息,不等于当前应用的真实产帧率。对比高刷体验时,至少同时记录实际显示模式、应用帧间隔、输入延迟、功耗/热状态和测试场景。

本文知乎地址

由于博客留言交流不方便,点赞或者交流,可以移步本文的知乎界面
知乎 - 新的流畅体验,90Hz 漫谈

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. 技术术语解释
    1. 1.1. 什么是屏幕刷新率 ?
    2. 1.2. 什么是 FPS ?
    3. 1.3. 什么是 Vsync ?
    4. 1.4. 什么是 Input 扫描周期 ?
  2. 2. 90Hz 用户体验
  3. 3. 从系统角度来看 90fps 的工作原理
    1. 3.1. 90fps 下 App 的渲染流程
    2. 3.2. 90fps 下 SurfaceFlinger 的渲染流程
  4. 4. 90fps 的优势和挑战
    1. 4.1. 优势
    2. 4.2. 挑战
    3. 4.3. 现代 Android 的适配入口
  5. 5. 本文知乎地址
  6. 6. 关于我 && 博客