日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )

發(fā)布時(shí)間:2025/6/17 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、 過度繪制
  • 二、 過度繪制兩種情況 ( 自定義控件 | 布局文件 )
  • 三、 過度繪制調(diào)試
    • 1. 打開過渡繪制調(diào)試工具
    • 2. 過渡繪制調(diào)試中不同顏色的含義
    • 3. 過渡渲染示例
  • 四、 背景過度繪制





一、 過度繪制



過渡繪制 :


① 過渡繪制 : GPU 繪制圖像時(shí) , 會(huì)從底層到上層逐層繪制 , 底層的圖像會(huì)被上層覆蓋 , 底層圖像無(wú)法顯示給用戶觀看 , 但還是會(huì)占用繪制時(shí)間 , 這樣就造成了時(shí)間上的浪費(fèi) , 甚至導(dǎo)致整個(gè)渲染過程超過 16 ms ;


② 過渡繪制的示例 : 打個(gè)比方 , 給墻刷大白 , 先刷一遍綠色的 , 再刷一遍藍(lán)色的 , 最后再刷白色的 , 很明顯先刷的兩遍是無(wú)用的 , 但是耗費(fèi)了很多時(shí)間 , GPU 的過渡繪制也是這個(gè)原理 , 底層繪制了很多重疊覆蓋的圖像 , 花費(fèi)了時(shí)間最終并不展示給用戶觀看 ;





二、 過度繪制兩種情況 ( 自定義控件 | 布局文件 )



Android 中 GPU 過度繪制情況 : 自定義控件 , 布局文件 ;


① 自定義組件 : 在自定義 View 組件中 , 實(shí)現(xiàn)的的 onDraw 方法使用 Canvas 繪制了很多重疊的元素 ; 如繪制 Bitmap 后 , 又在該 Bitmap 上又繪制了一個(gè)矩形 , 這樣矩形覆蓋了 Bitmap , 這兩個(gè)圖像都要被 GPU 渲染 , 這樣就增加了渲染時(shí)間 ;


② 布局層次深 : 在普通的布局文件中 , 布局嵌套很多 ; 如外層的 RelativeLayout , 內(nèi)層嵌套了 LinearLayout , 在線性布局中又嵌套了 FrameLayout , 布局嵌套會(huì)導(dǎo)致很多組件的重疊 ; 對(duì)于每個(gè)組件 , CPU 都會(huì)將該組件對(duì)象轉(zhuǎn)為向量圖 , 傳遞給 GPU 渲染 , 重疊圖像過多 , 顯然會(huì)使 GPU 過渡繪制 ;


設(shè)置透明背景 , 或者設(shè)置組件 Gone , 就不會(huì)繪制該組件





三、 過度繪制調(diào)試





1. 打開過渡繪制調(diào)試工具


開發(fā)者選項(xiàng)中 , 有 “調(diào)試 GPU 過渡重繪” 選項(xiàng) , 打開該選項(xiàng) , 選擇 “顯示過渡繪制區(qū)域” , 即可查看過渡繪制情況 ;


選擇 第二項(xiàng) , “顯示過渡繪制區(qū)域” , 即可查看過渡繪制情況 ;



2. 過渡繪制調(diào)試中不同顏色的含義


組件上各個(gè)顏色代表的含義 : 打開過渡繪制調(diào)試工具后 , 組件上有不同的顏色 ;


① 藍(lán)色 : GPU 過度繪制了 111 次 , 沒有過渡繪制 ;

② 淺綠色 : GPU 過度繪制了 222 次 ;

③ 淺紅色 : GPU 過度繪制了 333 次 ;

④ 深紅色 : GPU 過度繪制了 444 次及 444 次以上 ;


一般情況下藍(lán)色 , 和淺綠色是可以接受的 , 紅色 , 深紅的區(qū)域絕對(duì)不能大范圍出現(xiàn) ;



3. 過渡渲染示例


這是 Android 的設(shè)置界面 , 大部分是藍(lán)色 , 或淺綠 , 淺紅色只占很小的部分 ;





四、 背景過度繪制



1 . 背景設(shè)置 :


① 設(shè)置背景 : 設(shè)置了背景 , 圖片或顏色值 , 繪制增加 111 次 ;

② 透明背景 : 背景透明 , 不增加繪制次數(shù) , 繪制增加 000 次 ;

③ 主題背景 : 在主題中設(shè)置了背景 , 也會(huì)增加 111 次繪制 ;


如果同時(shí)設(shè)置布局的背景和主題背景 , 此時(shí)會(huì)繪制 222 次 ;

刪除一次背景設(shè)置 , 這里建議刪除主題的背景 ;



2 . 刪除主題背景 :


① 使用代碼刪除 : 調(diào)用 getWindow().setBackgroundDrawable( null ) 方法 , 刪除背景 , 該方法調(diào)用調(diào)用必須 在 super.onCreate 之后, 在 setContentView 之前 ;

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 刪除背景, 該調(diào)用必須在 super.onCreate 之后, setContentView 之前getWindow().setBackgroundDrawable(null);setContentView(R.layout.activity_main); }

② 主題中刪除 ( 建議 ) : 在主題中設(shè)置 <item name=“android:windowBackground”>null</item> 元素 , 然后 Activity 使用該主題 , 即可避免背景二次重繪 ;

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><!-- 設(shè)置應(yīng)用啟動(dòng)時(shí)默認(rèn)顯示的圖片 , 這樣比白屏/黑屏體驗(yàn)好一些 --><!--<item name="android:windowBackground">@mipmap/ic_launcher</item>--><!-- 將背景設(shè)置成透明的 --><!--<item name="android:windowIsTranslucent">true</item>--></style><style name="AppTheme.NoBackground" parent="AppTheme"><!-- 布局渲染時(shí), 不設(shè)置主題背景, 避免過度重繪 --><item name="android:windowBackground">null</item></style></resources>

在 AndroidManifest.xml 的 Activity 標(biāo)簽中設(shè)置該主題 , 即可取消該背景 ;

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="kim.hsl.rtmp"><application><activityandroid:theme="@style/AppTheme.NoBackground"android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application> </manifest>

或者在代碼中設(shè)置主題 :

@Overrideprotected void onCreate(Bundle savedInstanceState) {/*此時(shí)應(yīng)用首界面啟動(dòng)完成, 將主題恢復(fù)成其它主題此處也可以根據(jù)不同的設(shè)置, 為應(yīng)用設(shè)置不同的主題*/setTheme(R.style.AppTheme.NoBackground);super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); }

總結(jié)

以上是生活随笔為你收集整理的【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。