专栏名称: 大淘宝技术
淘系技术官方账号
目录
相关文章推荐
程序猿  ·  离谱!一边裁员,一边60K*15薪招人 ·  昨天  
庞门正道  ·  你好,这个包装多少钱? ·  15 小时前  
OSC开源社区  ·  AI 云原生时代,开发一个 Agent ... ·  18 小时前  
玉伯  ·  这张配图看着不错 ☘️ ·  2 天前  
51好读  ›  专栏  ›  大淘宝技术

探索淘宝购物车SurfaceView闪黑的解决方案

大淘宝技术  · 公众号  · 程序员 设计  · 2025-02-14 17:44

主要观点总结

本文介绍了在业务需求与产品形态高度不确定性的情况下,如何应对产品形态与产品节奏相对确定的情况,并探索了淘宝交易终端架构的演进方向。文章主要描述了如何通过混合架构(Native 业务容器 + Weex 2.0)来解决体验问题,并针对购物车技术架构的探索和优化进行了详细的阐述。

关键观点总结

关键观点1: 购物车的技术架构和挑战

介绍了购物车的技术架构,包括DX+Native的方式以及面临的挑战,如性能问题和迭代效率。

关键观点2: SurfaceView闪黑问题的原因和解决方案

详细解释了SurfaceView闪黑问题的原因,包括SurfaceView的特性以及页面切换时的问题。同时介绍了多种解决方案,如修改Fragment切换方式、截屏、Image->Surface转换等。

关键观点3: 不同解决方案的优缺点

分析了不同解决方案的优缺点,包括性能、内存、CPU等方面的考虑。

关键观点4: 团队介绍和拓展阅读

介绍了淘天集团基础交易终端团队的工作内容和职责,以及相关的拓展阅读,如3DXR技术、终端技术、音视频技术、服务端技术等。


正文

请到「今天看啥」查看全文



 什么时候SurfaceView可见性会变化?
  • SurfaceView被removeView,如:主Tab切换
  • Activity前后台切换,如:打开详情/回到手机Home

  • Activity销毁,如:finish页面


DX+Native购物车Tab切换为什么没有闪的问题呢?
DX采用原生View绘制,Fragment页面切换受VSync信号和MessageQueue的同步屏障控制,确保在执行完performTraversals()(即View的测量、布局和绘制三大流程)之后,才进行下一步操作,这样可以保证UI的一致性。

图片
方案


由于SurfaceView的特性,可见性变化的时候,就可能导致黑屏。业内有几种解决办法:

  1. 页面切换不执行remove SurfaceView,只执行visible/gone
  2. 盖View,遮住黑屏
  3. Texture/Image->Surface切换


Fragment不销毁


概述

主Tab页面切换,由FragmentManager的attach/detach改为show/hide,避免SurfaceView可见性变化


效果

Tab切换不会闪。



方案细节

修改Fragment切换方式:从attach/detach改为show/hide


show/hide不会触发购物车Fragment的生命周期回调, SurfaceView也不会从view树中移除,因此切换不会闪。


回到主Tab的场景,如果采用FragmentManagerattach/detach,会触发Fragment生命周期回调(onDestroyView),内部会把SurfaceView从view树上移除,从而触发onWindowVisibilityChanged,最终导致Surface被destroy,而调用show/hide并不会触发onWindowVisibilityChanged,所以不会导致Surface销毁。


截屏


概述

从购物车切换到其他Tab时,保存购物车的截屏,再次从其他Tab进入购物车的时候,先显示截屏View,待SurfaceView开始渲染之后,再隐藏截屏View,显示SurfaceView。


效果
Tab切换不会闪,但截屏有API系统版本限制(Android 8.0,API 26)


方案细节
  1. 核心:SurfaceView从View树中移除,内部会销毁当次Surface,所以要想成功截屏必须在这个销毁动作执行之前。

  2. 截屏:在Tab切换Preload阶段/back键触发时截图,期间会卡主主线程(设置超时,如:100ms),在截屏完成之后(显示截屏兜底图),再切换Fragment

  • 购物车切到其他Tab,Nav Preload阶段截图并显示兜底图

// 切换到非购物车Tab回调private val mTabOtherCallback: ()-> Unit = {






请到「今天看啥」查看全文


推荐文章
庞门正道  ·  你好,这个包装多少钱?
15 小时前
玉伯  ·  这张配图看着不错 ☘️
2 天前
中央戏剧学院就业创业指导中心  ·  校园招聘会单位发布之二十:华策影视
8 年前
21世纪经济报道  ·  【夜读】一个人的修养,看失意时的善良
7 年前
电影铺子  ·  今天,全国最心碎的人大概是杜淳
7 年前