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

家谱网站的首页怎么做企业品牌推广网站

家谱网站的首页怎么做,企业品牌推广网站,搭建网站用什么系统,西安到北京高铁多长时间一、卡顿检测的原理 卡顿的本质是主线程(UI 线程)未能及时完成某帧的渲染任务(超过 16.6ms,以 60Hz 屏幕为例),导致丢帧(Frame Drop)。检测卡顿的核心思路是监控主线程任务的执行时…

一、卡顿检测的原理

卡顿的本质是主线程(UI 线程)未能及时完成某帧的渲染任务(超过 16.6ms,以 60Hz 屏幕为例),导致丢帧(Frame Drop)。检测卡顿的核心思路是监控主线程任务的执行时间

常见检测方法:
  1. 主线程监控(Looper Printer)

    • 原理:利用 LooperPrinter 机制,在每条消息处理前后打印日志,统计消息执行时间。
    • 代码示例:
      Looper.getMainLooper().setMessageLogging(printer -> {if (printer.startsWith(">>>>> Dispatching")) {startTime = System.currentTimeMillis();} else if (printer.startsWith("<<<<< Finished")) {long cost = System.currentTimeMillis() - startTime;if (cost > 16) reportBlock(cost);}
      });
      
  2. Choreographer FrameCallback

    • 原理:通过向 Choreographer 注册 FrameCallback,在每一帧开始绘制时触发回调,计算帧耗时。
    • 代码示例:
      Choreographer.getInstance().postFrameCallback(new FrameCallback() {@Overridepublic void doFrame(long frameTimeNanos) {long current = System.currentTimeMillis();if (lastFrameTime > 0) {long cost = current - lastFrameTime;if (cost > 16) reportJank(cost);}lastFrameTime = current;Choreographer.getInstance().postFrameCallback(this); // 持续监控}
      });
      
  3. Systrace/Perfetto

    • 原理:系统级工具,通过插桩代码和内核事件,分析每一帧的耗时及卡顿原因。
  4. BlockCanary 等开源库

    • 原理:基于主线程监控,结合堆栈采样,定位耗时方法。

二、Choreographer 的工作原理

Choreographer 是 Android 渲染系统的核心协调者,负责接收 VSync 信号并调度 UI 渲染流程。

1. 核心职责
  • 接收来自 SurfaceFlinger 的 VSync 信号(垂直同步信号,通常 60Hz)。
  • 按优先级调度以下任务:
    • INPUT(输入事件)
    • ANIMATION(属性动画)
    • TRAVERSAL(View 的 measure/layout/draw)
    • COMMIT(提交渲染结果)
2. 关键流程
  1. VSync 信号到达

    • 由硬件或软件模拟生成,通知应用开始新一帧的渲染。
  2. 任务调度(Choreographer)

    • Choreographer 根据 VSync 信号,依次触发注册的 FrameCallback
    • 调用 doFrame() 方法,依次处理输入、动画、视图遍历等任务。
  3. UI 渲染阶段

    • Measure/Layout/Draw:View 系统遍历视图树,生成绘制命令。
    • Sync & Upload:将 UI 数据同步到 RenderThread。
    • Draw:RenderThread 通过 OpenGL/Vulkan 将数据提交给 GPU。
  4. 提交到 SurfaceFlinger

    • 最终由 SurfaceFlinger 合成所有 Layer,输出到屏幕。
3. 代码流程
// Choreographer 核心逻辑
void doFrame(long frameTimeNanos, int frame) {// 1. 计算掉帧情况if (jitterNanos >= mFrameIntervalNanos) {Log.w(TAG, "Frame time jitter: " + jitterNanos);}// 2. 按顺序处理任务mFrameInfo.markInputHandlingStart();doCallbacks(Choreographer.CALLBACK_INPUT, frameTimeNanos);mFrameInfo.markAnimationsStart();doCallbacks(Choreographer.CALLBACK_ANIMATION, frameTimeNanos);mFrameInfo.markPerformTraversalsStart();doCallbacks(Choreographer.CALLBACK_TRAVERSAL, frameTimeNanos);doCallbacks(Choreographer.CALLBACK_COMMIT, frameTimeNanos);
}

三、卡顿与 Choreographer 的关系

  1. 卡顿的根本原因

    • 主线程在 doFrame() 中执行的任务(如 View 绘制、动画计算)耗时过长,导致未能在下一个 VSync 信号到来前完成渲染。
  2. Choreographer 的监控能力

    • 通过 postFrameCallback 可以精确测量两帧之间的时间差,判断是否发生丢帧。
    • 系统内部会统计 jankyFrames(掉帧数),并通过 onJankyFrames 回调通知应用。

四、优化卡顿的建议

  1. 减少主线程任务
    • 耗时操作(IO、网络、计算)移至子线程。
  2. 优化 View 层级
    • 避免过度绘制,减少 measure/layout/draw 耗时。
  3. 合理使用动画
    • 优先使用硬件加速的属性动画(如 ViewPropertyAnimator)。
  4. 监控工具结合
    • 使用 Systrace 分析渲染流水线,定位阻塞点。

总结

  • 卡顿检测依赖对主线程任务耗时的监控,可通过多种工具实现。
  • Choreographer 是 Android 渲染系统的中枢,通过 VSync 信号驱动 UI 渲染流程,其调度机制直接影响帧率稳定性。
  • 深入理解这两者的原理,是优化应用流畅性的关键基础。
http://www.dtcms.com/wzjs/454125.html

相关文章:

  • 广东省建设银行招聘网站外贸网站免费推广b2b
  • 莘县网站seo查询seo
  • 怎么自己网站建设最近最新的新闻
  • 汝阳县住房与城乡建设局建局网站seo排名赚app是真的吗
  • 网站建设公司需要哪些百度优化推广
  • 建设网站有哪些内容广州网络推广外包
  • 景宁建设局网站官网网络软文写作
  • 做一个网站平台的流程是什么网站推广宣传语
  • 福建鞋子做淘宝图片网站网推渠道
  • 服装定制品牌排行榜前十名seo网络培训学校
  • 网站建设推广保举火13星电商网站建设价格
  • 网站怎么去优化seo的五个步骤
  • 大学生引流推广的方式深圳seo优化公司排名
  • 怎样做公司网站谷歌seo推广服务
  • 免费素材网站哪个最好seo外链工具软件
  • 设计购物网站咋做哈尔滨关键词排名工具
  • 四川成都网站建设贵阳网络推广排名
  • 郑州专业做网站企业免费的个人网站html代码
  • 网站右侧广告代码网站推广多少钱一年
  • 上海网站快速排名网站接广告
  • 可不可以自己做网站搜索百度下载安装
  • 广州市花都区网站建设公司seo快速排名软件网站
  • 推广公司违法吗网站网络排名优化方法
  • 网站建设哪个公司好平台软件定制开发
  • 泉州网站建设解决方案无限制访问国外的浏览器
  • 毕业设计网站代做靠谱吗网站外链工具
  • 网站挂黑链工具百度网盘app下载安装官方免费下载
  • vps建站教程quark搜索引擎入口
  • 响应式网站开发费用如何做运营推广
  • 门户网站建设创新免费发帖论坛大全