日韩高清一区_国产亚洲一区二区三区四区_亚洲国产一二三_久热精品视频

登錄
首頁 > 智駕游記 > 探索淘寶購物車SurfaceView閃黑的解決方案

探索淘寶購物車SurfaceView閃黑的解決方案

發布時間:2025-02-15 16:38:55

如何應對產品形態與產品節奏相對確定情況下轉變為『在業務需求與產品形態高度不確定性的情況下,如何實現業務交付時間與交付質量的確定性』。我們希望通過混合架構(Native 業務容器 + Weex 2.0)作為未來交易終端架構的重要演進方向,在 Native 容器側充分發揮原生語言的性能優勢、常駐 App 的調控與管控能力、手勢識別與交互優勢來解決體驗問題。本專題《淘寶交易終端架構探索》是我們摸索出的部分實踐總結,歡迎大家一起交流進步。

 

第一篇:《Weex購物車長列表橫滑操作優化“編年史”》

第二篇:《淘寶頁面首幀優化的經驗和心得》

第三篇:《淘寶App交易鏈路終端混合場景體驗探索》

第四篇:《淘寶訂單列表

Fragment轉場動畫卡頓解決方案

第五篇:《探索淘寶購物車SurfaceView閃黑的解決方案》(本篇)

 


引言

 

購物車的技術架構一直是DX+Native,在業務快速迭代的今天,可能不滿足迭代效率,需要探索一種性能佳+迭代快的方式,由此開始探索購物車Weex化。

在進入主TabWeex購物車(SurfaceView)之后,我們發現切換到其他Tab(如:首頁),再回到購物車,兩次切換都能看到明顯的閃黑。

 

,時長00:09


SurfaceView閃黑的原理是什么?

 

SurfaceView繼承自 View 類,但與普通的 View 不同,它內部使用了一個獨立的繪圖表面(即 Surface),這個 Surface 可以在主 UI 線程之外的線程上進行控制和繪制。這樣做的好處是,即使繪制操作很復雜,也不會影響到 UI 線程的響應性和流暢性。

 

View視圖位于自繪視圖Render Surface下方,通過對自繪視圖的Render Surface挖洞來透出下面的View視圖。

 

Tab切換頁面的原理是FragmentManager的attach和detach,會觸發Fragment根布局的add/remove,最終導致SurfaceView從View樹上添加/移除,進而影響SurfaceView的可見性。

 

閃黑問題本質上是:SurfaceView的可見性發生變化時,會導致其內部的Surface被銷毀/重建。在沒有內容呈現的情況下,SurfaceView顯示為黑色。

 

什么時候SurfaceView可見性會變化?

SurfaceView被removeView,如:主Tab切換
Activity前后臺切換,如:打開詳情/回到手機Home
Activity銷毀,如:finish頁面

DX+Native購物車Tab切換為什么沒有閃的問題呢?

DX采用原生View繪制,Fragment頁面切換受VSync信號和MessageQueue的同步屏障控制,確保在執行完performTraversals()(即View的測量、布局和繪制三大流程)之后,才進行下一步操作,這樣可以保證UI的一致性。


方案

 

由于SurfaceView的特性,可見性變化的時候,就可能導致黑屏。業內有幾種解決辦法:

頁面切換不執行remove SurfaceView,只執行visible/gone
蓋View,遮住黑屏
Texture/Image->Surface切換


?Fragment不銷毀


概述
主Tab頁面切換,由FragmentManager的attach/detach改為show/hide,避免SurfaceView可見性變化

 

效果
Tab切換不會閃。

 

,時長00:07

 

方案細節

修改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)

 

,時長00:07

 

方案細節
核心:SurfaceView從View樹中移除,內部會銷毀當次Surface,所以要想成功截屏必須在這個銷毀動作執行之前。
截屏:在Tab切換Preload階段/back鍵觸發時截圖,期間會卡主主線程(設置超時,如:100ms),在截屏完成之后(顯示截屏兜底圖),再切換Fragment
購物車切到其他Tab,Nav Preload階段截圖并顯示兜底圖
// 切換到非購物車Tab回調
private val mTabOtherCallback: ()-> Unit = {
    screenShot()
}


// back鍵返回首頁
override fun onBackPress(): Boolean {
    screenShot()
    return false
}


// 偽代碼
private val screenShot() {
    val bitmap = requestBitmap()
    // 添加視圖bitmap
    mScreenImageView?.setImageBitmap(bitMap)
    mScreenImageView?.setBackgroundColor(if (isSuccess) Color.TRANSPARENT else Color.WHITE)
    mScreenImageView?.visibility = View.VISIBLE
}

回到購物車,weex視圖開始繪制,移除兜底圖
override fun onWeexUiDisplayed() {
    if (mScreenImageView?.visibility == View.VISIBLE) {
        mScreenImageView?.visibility = View.GONE
    }
}
3. PixelCopy.request存在版本問題,只能在android 8.0及以上版本生效

 

api限制問題

由于PixelCopy.request截圖存在系統版本限制,因此針對低于android8.0版本(如:Y67),做如下處理:

上述方案中購物車切換到其他Tab的時候,由顯示截圖改為顯示白色背景圖
顯示和隱藏兜底圖的時機不變
改動的實質是避免SurfaceView切換帶來的閃黑問題,添加了白色背景圖,從體感上沒有那么的突兀

api限制另一種解決思路

通過Weex提供獲取SurfaceView bitMap方式:

圖片未采樣,內存占用太高
圖片應該用的是ARGB,購物車沒有alpha透明度,可以直接用RGB,內存占用會更小一些
仍然存在耗時問題
列表滾動的時候,切換tab,需要先停止列表,然后再截圖


影響

性能損耗:從購物車切換到其他Tab,會執行PixelCopy.request截圖本身是耗時的,會卡主主線程,有一定的耗時
截圖對內存有輕微影響,但對Java Heap影響不大
如果購物車列表處于滑動/動畫/下拉/上拉等非靜止狀態,切換到其他Tab,再回到購物車,會導致截的圖不是最后一幀,視覺上會導致頁面抖動
Android低系統版本體驗有損,截圖降級為白色背景圖


?Image->Surface轉換


概述
從購物車去到其他Tab,先切換成ImageView,同步渲染完,再跳轉其他Tab;從其他Tab回到購物車,ImageView先上屏,再切換成SurfaceView。

 

效果
其他Tab進入購物車:iv->sv無白幀,很絲滑,購物車切到其他Tab:sv->iv有較多的白幀(待解決,參考了UC Hummer的方案)

Copyright 2017-2025 新車測評網 版權所有  ICP備18049689號-30
日韩高清一区_国产亚洲一区二区三区四区_亚洲国产一二三_久热精品视频
久久亚洲私人国产精品va媚药| 亚洲午夜一区二区三区| 国产亚洲欧美一区| 国产欧美日韩综合一区在线观看| 国产午夜精品在线| 在线精品福利| 亚洲人成网站精品片在线观看| 一本不卡影院| 欧美在线free| 欧美大片免费观看| 欧美精品日韩| 国产欧美韩国高清| 在线日本成人| 亚洲无吗在线| 免费观看一区| 欧美视频在线观看| 狠狠色综合一区二区| 日韩视频一区二区三区| 篠田优中文在线播放第一区| 久久综合伊人77777尤物| 国产精品高潮久久| 亚洲第一级黄色片| 亚洲一区二区三区中文字幕| 久久视频国产精品免费视频在线| 欧美日韩一区二区三区四区五区 | 久久久之久亚州精品露出| 欧美日本亚洲| 狠狠色综合日日| 亚洲无线视频| 猛干欧美女孩| 国产精品亚洲片夜色在线| 亚洲国产岛国毛片在线| 午夜影院日韩| 欧美伦理视频网站| 极品尤物av久久免费看| 国产精品99久久久久久久久 | 国产精品区二区三区日本| 亚洲成色精品| 香蕉久久国产| 欧美日韩专区| 亚洲国产日韩欧美一区二区三区| 性感少妇一区| 欧美日韩久久| 亚洲国产成人精品女人久久久 | 亚洲欧美国产高清va在线播| 欧美极品影院| 在线观看欧美视频| 欧美一区影院| 国产精品久久久久久久久久妞妞| 亚洲精品在线视频| 久久综合亚洲社区| 国产婷婷色综合av蜜臀av| 在线视频你懂得一区| 欧美成人中文| 伊人精品久久久久7777| 欧美在线视频二区| 国产精品一区二区三区久久久 | 欧美专区18| 国产乱码精品一区二区三区不卡| 一本色道久久88综合亚洲精品ⅰ | 国内视频精品| 欧美一区二区三区免费视| 国产精品国产三级国产专播精品人| 最新日韩中文字幕| 美玉足脚交一区二区三区图片| 国产一区免费视频| 欧美一区二区免费观在线| 国产精品久久久久久久久久直播| av成人激情| 欧美日本韩国| 日韩亚洲欧美成人| 欧美激情一区二区三区蜜桃视频| 亚洲高清二区| 免费久久99精品国产| 伊人夜夜躁av伊人久久| 久久久精品国产免费观看同学| 国产日本欧美视频| 翔田千里一区二区| 国产亚洲精品高潮| 久久九九精品| 一区二区在线视频| 噜噜噜91成人网| 亚洲夫妻自拍| 欧美成人国产va精品日本一级| 亚洲国产精品高清久久久| 欧美成人免费大片| 亚洲精品欧美极品| 欧美日韩国产限制| 一区二区三区四区精品| 国产精品福利av| 欧美亚洲综合另类| 国产亚洲成年网址在线观看| 久久精品首页| 136国产福利精品导航网址| 美女视频黄免费的久久| 最新成人av在线| 欧美精品激情blacked18| 9国产精品视频| 国产精品久久久久久久午夜片| 亚洲专区在线视频| 国产日韩av在线播放| 久久久久久一区二区三区| 在线欧美一区| 欧美精品一区二区精品网| 一本色道久久88综合日韩精品| 国产精品久久久久久久电影| 亚欧成人精品| 1024亚洲| 欧美日韩国产成人在线| 亚洲综合电影| 国内外成人免费激情在线视频网站| 久久亚洲综合色一区二区三区| 91久久精品国产91性色| 欧美色精品在线视频| 欧美亚洲一区二区三区| 在线观看日韩www视频免费| 欧美精品日韩三级| 午夜免费电影一区在线观看| 伊人久久大香线| 欧美日本成人| 性欧美在线看片a免费观看| 伊人久久大香线蕉综合热线| 欧美日韩1080p| 欧美一级视频免费在线观看| 亚洲国产精品精华液网站| 国产精品国产三级国产aⅴ浪潮 | 在线日本欧美| 欧美午夜免费| 久久久综合精品| 一区二区三区国产在线| 国产专区欧美精品| 欧美日韩一区二区欧美激情| 久久国产精品99国产精| 亚洲国产经典视频| 国产精品美女久久久久久免费| 久久人人97超碰国产公开结果| 99精品视频免费观看视频| 国产亚洲欧美另类中文| 欧美理论在线播放| 久久精品日产第一区二区| 99re视频这里只有精品| 国内成人精品2018免费看| 欧美日韩国产综合视频在线观看| 久久er精品视频| 99re在线精品| 在线不卡视频| 国产精品网红福利| 欧美精品久久久久久久久老牛影院| 午夜亚洲福利| 亚洲免费成人av| 好吊色欧美一区二区三区四区 | 国产精品乱子久久久久| 欧美黄色大片网站| 久久激情五月激情| 亚洲小视频在线观看| 亚洲国产精品福利| 国产亚洲激情| 欧美体内谢she精2性欧美| 欧美v日韩v国产v| 欧美在线日韩精品| 中国av一区| 最新国产乱人伦偷精品免费网站| 国产一区深夜福利| 国产精品久久久久久影视 | 欧美三级乱码| 免费在线欧美黄色| 欧美在线三级| 亚洲一区二区毛片| 亚洲毛片av在线| 在线欧美三区| 狠狠色丁香婷婷综合影院 | 在线一区二区三区做爰视频网站| 亚洲电影第1页| 国产自产高清不卡| 国产欧美一区二区精品仙草咪| 欧美视频一区二区三区在线观看 | 国产精品日韩一区| 欧美日韩一区三区| 欧美精品久久99| 另类亚洲自拍| 久久久久欧美精品| 午夜亚洲福利| 午夜精品av| 亚洲天堂久久| 一道本一区二区| 99热精品在线观看| 亚洲精品无人区| 91久久精品www人人做人人爽| 在线精品一区二区| 激情久久久久| 韩国美女久久| 国产伊人精品| 国产有码一区二区| 国产亚洲一区二区在线观看| 国产欧美日本一区视频| 国产伦精品一区二区三区四区免费 | 夜夜爽av福利精品导航 | 亚洲国产三级网| 亚洲国产日韩一区二区| 亚洲国产精品123| 91久久久国产精品| 亚洲精品一区二| 亚洲免费观看在线观看| 99国产精品视频免费观看一公开|