欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 渲染機制深入理解

 更新時間:2017年03月19日 11:42:58   投稿:lqh  
這篇文章主要介紹了Android 渲染機制深入理解的相關資料,需要的朋友可以參考下

基礎知識

CPU: 中央處理器,它集成了運算,緩沖,控制等單元,包括繪圖功能.CPU將對象處理為多維圖形,紋理(Bitmaps、Drawables等都是一起打包到統一的紋理)。

GPU:一個類似于CPU的專門用來處理Graphics的處理器, 作用用來幫助加快格柵化操作,當然,也有相應的緩存數據(例如緩存已經光柵化過的bitmap等)機制。

OpenGL ES:是手持嵌入式設備的3DAPI,跨平臺的、功能完善的2D和3D圖形應用程序接口API,有一套固定渲染管線流程. OpenGL ES詳解

DisplayList 在Android把XML布局文件轉換成GPU能夠識別并繪制的對象。這個操作是在DisplayList的幫助下完成的。DisplayList持有所有將要交給GPU繪制到屏幕上的數據信息。

格柵化 是 將圖片等矢量資源,轉化為一格格像素點的像素圖,顯示到屏幕上。

垂直同步VSYNC:讓顯卡的運算和顯示器刷新率一致以穩(wěn)定輸出的畫面質量。它告知GPU在載入新幀之前,要等待屏幕繪制完成前一幀。下面的三張圖分別是GPU和硬件同步所發(fā)生的情況,Refresh Rate:屏幕一秒內刷新屏幕的次數,由硬件決定,例如60Hz.而Frame Rate:GPU一秒繪制操作的幀數,單位是30fps,正常情況過程圖如下:
這里寫圖片描述

渲染機制分析渲染流程簡介

Android整體的繪制流程如下:

UI對象—->CPU處理為多維圖形,紋理 —–通過OpeGL ES接口調用GPU—-> GPU對圖進行光柵化(Frame Rate ) —->硬件時鐘(Refresh Rate)—-垂直同步—->投射到屏幕

這里寫圖片描述

Android系統每隔16ms發(fā)出VSYNC信號(1000ms/60=16.66ms),觸發(fā)對UI進行渲染, 如果每次渲染都成功,這樣就能夠達到流暢的畫面所需要的60fps,為了能夠實現60fps,這意味著計算渲染的大多數操作都必須在16ms內完成。

渲染時間線

這里寫圖片描述

這里寫圖片描述

正常情況下Android的GPU會在16ms完成頁面的繪制,如果一幀畫面渲染時間超過16ms的時候,垂直同步機制會讓顯示器硬件 等待GPU完成柵格化渲染操作,然后再次繪制界面,這樣就會看起來畫面停頓。

當GPU渲染速度過慢,就會導致如下情況,某些幀顯示的畫面內容就會與上一幀的畫面相同。

這里寫圖片描述

渲染常見問題

GPU過度繪制

OverDraw是開發(fā)中常見的優(yōu)化點,是指一個界面出現層層繪制的情況,如:
這里寫圖片描述

我們可以使用一些第三方工具來查看是否過渡繪制。如小米魅族。

這里寫圖片描述

任何時候View中的繪制內容發(fā)生變化時,都會重新執(zhí)行創(chuàng)建DisplayList,渲染DisplayList,更新到屏幕上等一 系列操作。這個流程的表現性能取決于你的View的復雜程度,View的狀態(tài)變化以及渲染管道的執(zhí)行性能。

當View的大小發(fā)生改變,DisplayList就會重新創(chuàng)建,然后再渲染,而當View發(fā)生位移,則DisplayList不會重新創(chuàng)建,而是執(zhí)行重新渲染的操作。

所以當界面過于復雜的時候,DisplayList繪制界面就會出現延遲而造成卡頓。

我們可以使用渲染工具檢測,工具中,不同手機呈現方式可能會有差別.分別關于StatusBar,NavBar,激活的程序Activity區(qū)域的GPU Rending信息。激活的程序Activity區(qū)域的GPU Rending信息。

我們打開手機的GPU Rending呈現的信息,我們以魅族為例:
這里寫圖片描述

這里寫圖片描述

說明:每一條柱狀線都包含三部分,

藍色代表測量繪制Display List的時間,
紅色代表OpenGL渲染Display List所需要的時間,
黃色代表CPU等待GPU處理的時間。

Android渲染優(yōu)化

讀懂Android的渲染機制對于優(yōu)化,特別是在寫布局的時候是很有幫助的。減少布局層級,減少GPU的渲染這對我們提供app的質量是很有幫助的。

去掉不必要的界面:

這里寫圖片描述

布局層級優(yōu)化

使用Hierarchy Viewer工具可以查看界面的層級,關于這塊的介紹請查看:Android布局優(yōu)化

這里寫圖片描述

圖片格式選擇

Android的界面能用png最好是用png了,因為32位的png顏色過渡平滑且支持透明。jpg是像素化壓縮過的圖片,質量已經下降了,再拿來做9path的按鈕和平鋪拉伸的控件必然慘不忍睹,要盡量避免。有條件的可以選擇webpp,這種格式的圖片占據的大小比較小,并且能滿足手機顯示的需要。

當背景無法避免,盡量用Color.TRANSPARENT

因為透明色Color.TRANSPARENT是不會被渲染的,他是透明的。

所以我們在設置界面的時候需要做一個判斷:

Bean bean=list.get(i);
 if (bean.img == 0) {
   Picasso.with(getContext()).load(android.R.color.transparent).into(holder.imageView);
   holder.imageView.setBackgroundColor(bean.backPic);
  } else {
   Picasso.with(getContext()).load(bean.img).into(holder.imageView);
   holder.imageView.setBackgroundColor(Color.TRANSPARENT);
  }

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • android中開啟actionbar的兩種方法

    android中開啟actionbar的兩種方法

    這篇文章主要介紹了android中開啟actionbar的兩種方法,本文給出了靜態(tài)開啟和動態(tài)開啟2種方法,需要的朋友可以參考下
    2015-06-06
  • Flutter進階之實現動畫效果(八)

    Flutter進階之實現動畫效果(八)

    這篇文章主要為大家詳細介紹了Flutter進階之實現動畫效果的第八篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android中圖片壓縮方案詳解及源碼下載

    Android中圖片壓縮方案詳解及源碼下載

    這篇文章主要介紹了Android中圖片壓縮方案詳解及源碼下載的相關資料,需要的朋友可以參考下
    2017-03-03
  • Android 實現云知聲版離線語音合成

    Android 實現云知聲版離線語音合成

    這篇文章主要介紹了Android 實現云知聲版離線語音合成,目前云知聲提供免費的離線TTS,功能也比較簡單,合成的語音也比較生硬,如果對合成的語音要求不高的話可以考慮接入。具體合成需要的小伙伴可以參考下面文章內容
    2022-06-06
  • Android基于自帶的DownloadManager實現下載功能示例

    Android基于自帶的DownloadManager實現下載功能示例

    這篇文章主要介紹了Android基于自帶的DownloadManager實現下載功能,結合實例形式分析了DownloadManager實現下載功能的具體操作步驟與相關注意事項,需要的朋友可以參考下
    2017-08-08
  • Android使用DatePickerDialog顯示時間

    Android使用DatePickerDialog顯示時間

    本文將結合實例代碼,介紹Android使用DatePickerDialog顯示時間,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • android app跳轉應用商店實現步驟

    android app跳轉應用商店實現步驟

    這篇文章主要為大家介紹了android app跳轉應用商店實現步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Android自定義動態(tài)壁紙開發(fā)(時鐘)

    Android自定義動態(tài)壁紙開發(fā)(時鐘)

    今天小編就為大家分享一篇關于Android自定義動態(tài)壁紙開發(fā)(時鐘),小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 詳解Android Studio安裝ButterKnife插件(手動安裝)

    詳解Android Studio安裝ButterKnife插件(手動安裝)

    這篇文章主要介紹了詳解AndroidStudio安裝ButterKnife插件(手動安裝),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Android 中在有序廣播中添加自定義權限的實例

    Android 中在有序廣播中添加自定義權限的實例

    這篇文章主要介紹了Android 中在有序廣播中添加自定義權限的實例的相關資料,這里對有序廣播的用法進行了詳細介紹并附有簡單實例,需要的朋友可以參考下
    2017-07-07

最新評論