Android的UI底層是用CPU繪圖的還是GPU繪圖的呢

2021-06-29 05:56:24 字數 1536 閱讀 5510

1樓:裁決加

安卓有2種繪製模型:

一,軟體繪製模型,這裡由cpu主導繪圖,檢視按照以下2個步驟繪圖。

讓檢視結構(view hierarchy)失效。

繪製整個檢視結構。

當應用程式需要更新它的部分ui時,都會呼叫內容發生改變的view物件的invalidate()方法。無效(invalidation)訊息請求會在view物件層次結構中傳遞,以便計算出需要重繪的螢幕區域(髒區)。然後,android系統會在view層次結構中繪製所有的跟髒區相交的區域。

但是,這種方法有兩個缺點:

1.      繪製了不需要重繪的檢視(與髒區域相交的區域)

2.      掩蓋了一些應用的bug(由於會重繪與髒區域相交的區域)

注意:在view物件的屬性發生變化時,如背景色或textview物件中的文字等,android系統會自動的呼叫該view物件的invalidate()方法。

二,硬體加速繪製模型,這裡由gpu主導繪圖,檢視按照以下3個步驟繪圖。

讓檢視結構失效。

記錄和更新顯示列表(display list)。

繪製顯示列表。

這種模式下,android系統依然會使用invalidate()方法和draw()方法來請求螢幕更新和展現view物件。但android系統並不是立即執行繪製命令,而是首先把這些view的繪製函式作為繪製指令記錄一個顯示列表中,然後再讀取顯示列表中的繪製指令呼叫opengl相關函式完成實際繪製。另一個優化是,android系統只需要針對由invalidate()方法呼叫所標記的view物件的髒區進行記錄和更新顯示列表。

沒有失效的view物件就簡單重用先前顯示列表記錄的繪製指令來進行簡單的重繪工作。

使用顯示列表的目的是,把檢視的各種繪製函式翻譯成繪製指令儲存起來,對於沒有發生改變的檢視把原先儲存的操作指令重新讀取出來重放一次就可以了,提高了檢視的顯示速度。而對於需要重繪的view,則更新顯示列表,然後再呼叫opengl完成繪製。

在這種繪製模型下,我們不能依賴一個檢視與髒區(dirty region)相交而導致它的draw()方法被自動呼叫,所以必須要手動呼叫該檢視的invalidate()方法去更新顯示列表。如果忘記這麼做可能導致檢視在改變後不會發生變化。

硬體加速提高了android系統顯示和重新整理的速度,但它也不是萬能的,它有三個缺陷:

1.      相容性(部分繪製函式不支援或不完全硬體加速)

2.      記憶體消耗(opengl api呼叫就會佔用8mb,而實際上會佔用更多記憶體)

3.      電量消耗(gpu耗電)

2樓:習義萬寄靈

4.0以下都是cpu繪圖,不過可以在build.prop加入一行**強制開啟gpu繪圖

4.0以上預設開啟gpu繪圖,但是可以在開發者選項裡關閉

繪圖的還是gpu繪圖的呢

3樓:雲南新華電腦學校

4.0以下都是cpu繪圖,不過可以在build.prop加入一行**強制開啟gpu繪圖

4.0以上預設開啟gpu繪圖,但是可以在開發者選項裡關閉

安卓程式是用什麼語言編寫的,Android軟體用什麼語言編寫的

最好還是找個培訓機構,自學成才真心不靠譜,耗費時間太多了 android軟體用什麼語言編寫的 安卓app主要用什麼程式語言的 甜心糕 門口繞圈走路的青蛙帶頭那隻 騎省通中掖,龍樓隔上臺。有落日鬆陵道,堤長欲抱城。談天信浩蕩。有女名羅子,生來才兩春。副出處雖雲異,同歡在法筵,人行明鏡中。是義誰能答,明...

什麼是「假冒」的Android系統

在android開源專案條款 androidopensourceproject 裡面,任何人可以使用任何版本的android 完全免費,所以amazon把它用到了kindlefire barnes noble把它用到了nook 那為什麼google偏偏對使用了android 的阿里雲表示 強烈關注 ...

Android是模仿Windows出來的嗎

不是,android是一種基於linux的自由及開放源 的作業系統,主要使用於移動裝置,如智慧手機和平板電腦,由google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用 安卓 或 安致 android作業系統最初由andy rubin開發,主要支援手機。2005年8月由g...