当前位置: 首页 > wzjs >正文

做网站公司哪家正规建立企业网站步骤

做网站公司哪家正规,建立企业网站步骤,wordpress怎么进,做经销找厂家好的网站简介 在移动应用开发中,触摸事件响应与UI绘制的同步竞争是导致卡顿和掉帧的主要原因之一。腾讯工程师提出的优先级策略通过紧急事件抢占、增量渲染机制和时间片补偿技术,有效解决了这一竞争问题。本文将深入分析这些技术原理,并提供完整的代码实现,帮助开发者构建更流畅的…

简介

在移动应用开发中,触摸事件响应与UI绘制的同步竞争是导致卡顿和掉帧的主要原因之一。腾讯工程师提出的优先级策略通过紧急事件抢占、增量渲染机制和时间片补偿技术,有效解决了这一竞争问题。本文将深入分析这些技术原理,并提供完整的代码实现,帮助开发者构建更流畅的用户体验。

一、技术背景与问题分析

1.1 Android帧渲染机制概述

Android系统采用垂直同步(VSync)机制确保屏幕刷新与UI渲染同步。在90Hz刷新率的华为Mate40 Pro上,每帧渲染时间间隔为约11ms,对渲染性能要求极高。系统通过SurfaceFlinger管理多个应用层的Surface,并将它们合成到屏幕上。每个应用的渲染流程包括测量(Measure)、布局(Layout)和绘制(Draw)三个阶段,通常在UI线程中执行。

Choreographer作为Android的"帧调度员",负责协调VSync信号与UI渲染任务。当VSync信号到达时,Choreographer会依次触发输入事件处理、动画更新和视图遍历等回调,确保UI更新在VSync周期内完成。

1.2 触摸事件与UI绘制的竞争问题

触摸事件处理与UI绘制在同一个VSync周期内的竞争可能导致严重卡顿。具体表现为:

  • 当用户快速滑动或连续点击时,大量触摸事件需要处理
  • 同时,UI需要重新布局和绘制
  • 如果主线程任务过多,导致在VSync周期内无法完成所有操作
  • 最终出现掉帧(Jank)现象,用户体验下降

华为Mate40 Pro在优化前帧抖动率高达18%,这表明其UI渲染与触摸事件处理之间存在严重的竞争问题。通过腾讯的优先级策略,这一问题得到了显著改善,帧抖动率降至3.2%。

1.3 优化策略的核心思想

腾讯的优先级策略包含三个核心组成部分:

  1. 紧急事件抢占:当存在未处理的ACTION_DOWN触摸事件时,延迟当前帧的UI绘制,确保用户交互得到及时响应
  2. 增量渲染机制:将UI绘制拆分为Background/Foreground阶段,允许在帧中期插入事件处理,减少单帧负载
  3. 时间片补偿:通过Choreographer.postFrameCallbackDelayed动态调整下一帧截止时间,避免连续掉帧

这些策略协同工作,确保在高负载场景下,触摸事件能够得到优先处理,同时UI渲染也能在合理时间内完成,从而显著提升用户体验。

二、触摸事件与UI绘制的竞争问题

2.1 输入事件与UI渲染的优先级矛盾

Android系统中,输入事件和UI渲染共享同一主线程资源。当用户触摸屏幕时,系统会生成MotionEvent对象并加入输入队列。在Choreographer的doFrame回调中,系统按固定顺序处理这些任务:

void doFrame(long frameTimeNanos) {// 处理输入事件doCallbacks(CALLBACK Input, frameTimeNanos);// 处理动画doCallbacks(CALLBACK ANIMATION, frameTimeNanos);// 处理视图遍历(测量、布局、绘制)doCallbacks(CALLBACK TRAVERSAL, frameTimeNanos);// 提交渲染数据doCallbacks(CALLBACK COMMIT, frameTimeNanos);
}

在高负载场景下,如果UI渲染阶段耗时过长,会导致下一VSync周期内无法处理新的输入事件。例如,在华为Mate40 Pro上,90Hz刷新率意味着每帧仅有约11ms的处理时间。如果UI渲染耗时超过11ms,系统会错过VSync信号,导致掉帧和输入延迟。

2.2 帧抖动率高的原因分析

华为Mate40 Pro优化前帧抖动率高达18%,主要原因包括:

  1. 单缓冲区渲染:在双缓冲机制下,当GPU仍在处理B帧时,CPU无法开始C帧的绘制,导致资源闲置
  2. 输入事件处理延迟:UI渲染阶段会阻塞后续输入事件的处理
  3. 动画与UI绘制耦合:动画计算和UI绘制共享同一VSync周期,容易互相影响
  4. 未优化的脏区域处理:系统默认重绘整个视图,即使只有小部分区域发生变化

这些因素共同导致在触摸事件频繁发生的场景下,UI渲染无法及时完成,造成帧抖动和卡顿现象。

三、腾讯优先级策略的实现原理

3.1 紧急事件抢占机制

紧急事件抢占是腾讯策略的核心,确保用户交互得到及时响应。当检测到未处理的ACTION_DOWN事件时,系统会延迟当前帧的UI绘制,优先处理触摸事件。

实现原理如下:

// 自定义Choreographer子类
public class CustomChoreographer extends Choreographer {private boolean hasPendingActionDown = false;@Overridepublic void doFrame(long frameTimeNanos) {// 检测是否有未处理的ACTION_DOWN事件if (hasPendingActionDown) {// 优先处理输入事件doCallbacks(CALLBACK Input, frameTimeNanos);// 延迟UI渲染postFrameCallbackDelayed(new FrameCallback() {@Overridepublic void doFrame(long frameTimeNanos) {// 处理UI渲染doCallbacks(CALLBACK TRAVERSAL, frameTimeNanos);doCallbacks(CALLBACK COMMIT, frameTimeNanos);}}, 0);hasPendingActionDown = false;return;}// 正常处理流程doCallbacks(CALLBACK Input, frameTimeNanos);doCallbacks(CALLBACK ANIMATION, frameTimeNanos);doCallbacks(CALLBACK TRAVERSAL, frameTimeNanos);doCallbacks(CALLBACK COMMIT, frameTimeNanos);}// 在InputDispatcher中设置标志public void setPendingActionDown(boolean hasPending) {hasPendingActionDown = hasPending;}
}

通过这种机制,系统可以确保在用户按下屏幕的瞬间,触摸事件得到及时处理,避免因UI渲染阻塞导致的输入延迟

3.2 增量渲染机制实现

增量渲染机制将UI绘制拆分为Background和Foreground阶段,允许在帧中期插入事件处理,减少单帧负载。

实现原理如下:

// 自定义ViewGroup实现增量渲染
public class IncrementalLayout extends ViewGroup {private boolean isBackgroundReady = false;private boolean is ForegroundReady = false;private Rect dirtyRegion = new Rect();public IncrementalLayout(Context context) {super(context);// 启用硬件加速setLayerType(LAYER_TYPE Software, null);}@Overrideprotected void onDraw(Canvas canvas) {if (!isBackgroundReady) {// 阶段1:绘制背景(固定内容)drawBackground canvas);isBackgroundReady = true;}if (!is ForegroundReady) {// 阶段2:绘制前景(变化内容)canvas.clipRect脏区域);drawForeground canvas);is ForegroundReady = true;} else {// 完整帧绘制drawBackground canvas);drawForeground canvas);}}// 在事件处理或动画回调中更新脏区域public void updateDirtyRegion(Rect region) {脏区域.union(region);invalidate脏区域);}// 重置渲染状态public void resetRenderState() {isBackgroundReady = false;is ForegroundReady = false;dirtyRegion.setEmpty();}
}

增量渲染通过将UI拆分为固定和变化部分,减少单帧绘制负载,提高渲染效率。在触摸事件处理过程中,系统仅重绘变化区域,而不是整个界面,从而减轻主线程负担。

3.3 时间片补偿技术

时间片补偿技术通过动态调整下一帧截止时间,避免连续掉帧。当检测到当前帧渲染超时后,系统会延长下一帧的截止时间,给渲染提供更多的缓冲时间。

实现原理如下:

// 帧时间监控与补偿
public class FrameCompensator implements FrameCallback {<
http://www.dtcms.com/wzjs/492288.html

相关文章:

  • 和魔鬼做交易的网站河南网络推广公司
  • 郑州管城建设网站黑马培训是正规学校吗
  • 网站规划html网络seo优化公司
  • 网站建设中企动力排名优化关键词公司
  • 怎么查网站有没有做底部导航关键词推广系统
  • 贵州碧江区住房和城乡建设局网站专业拓客团队怎么收费
  • 淘宝做首页热点的什么网站百度快速排名优化技术
  • 学校网站建设的意义和目的百度信息流开户多少钱
  • 美工模板网站云南seo网络优化师
  • 化妆品品牌网站建设营销网络图
  • 什么网站做h5做得好seo搜索引擎优化怎么做
  • 淘宝客商品推广网站建设网站优化排名易下拉系统
  • 什么网站是做汽车装饰配件的武汉大学人民医院
  • 简述网站一般建设的流程图无锡哪里有做网站的
  • 网站的登录注册页面怎么做的重庆seo务
  • 有个可以做图片的网站2021年新闻摘抄
  • 室内设计网站大全网南宁网站快速排名提升
  • wordpress怎么批量修改分类基本seo技术在线咨询
  • 用vps和wordpress百度网站怎么优化排名靠前
  • 重庆最新网站备案优化网站的意思
  • wordpress301规则手机卡顿优化软件
  • .net和php哪个做网站好网络营销的核心是
  • 加快网站速度吗上海最新新闻
  • 网站建设的基本概念啥都能看的浏览器
  • 怎么提高网站加载速度优化什么
  • 什么网站可以做软件有哪些内容吗泽成杭州seo网站推广排名
  • 长沙可以做网站的公司长尾关键词快速排名软件
  • 网站流量怎么做公众号如何推广运营
  • 茂名网站建设技术托管中国seo公司
  • 我做动作你来猜的网站腾讯推广平台