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

2021-06-29 05:55:19 字數 1472 閱讀 1959

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()方法去更新顯示列表。如果忘記這麼做可能導致檢視在改變後不會發生變化。

2樓:九月廿五

cpu和gpu都會參與 繪圖

珠寶設計是手工繪圖還是電腦繪圖

3樓:雲南新華電腦學校

1、珠寶設計大都是手繪圖的,**繪圖只是做好圖定完版之後電腦做出模型來。

電腦畫圖也是需要的,手繪比較常用,畢竟效果圖來的直觀快速!

2、肯定是珠寶首飾設計好!這個需要有自己的創意,比較鍛鍊自己的思維,同時還得客戶認可 ,這個也是很鍛鍊人的,經驗會豐富一些!

珠寶修圖,也是一個不可少的過程,個人認為,這個過程就在打基礎,為自己能設計出更好的珠寶做鋪墊!

4樓:奈哥的宇宇

都可以,一般手工繪圖的話會難一點

為什麼還說Android的UI操作並不是執行緒安全的

非ui執行緒中重新整理介面的時候,ui執行緒也在重新整理介面,多個介面重新整理的操作不能同步,導致執行緒不安全。android 子線 的不能操作ui麼 在開發應用中,如果子執行緒中更新ui會丟擲異常,但並不是因為只有ui執行緒才能更新ui,而是因為viewrootimpl會進行檢查,如果 mthre...

android的helper怎麼用

把幣給我,我告訴你怎麼用,androidhelper封裝了所有安卓藉口,就算你要改造你的手機都可以 qputhon裡面有一個qsl4a test.py,裡面有 這個def test alert dialog title user inte ce message wel e to the sl4a i...

android的epub用什么來排版渲染

android使用richeditor來渲染文字,對於epub檔案格式要採用位元組社 唐茶 或者多看閱讀引擎渲染。android的富文字編輯器 richeditor 通過檢視開源 你會發現在sdk下,text.style 包裡面包含了所有我們需要的樣式,像粗體 斜體等等這類效果都對應封裝了相關的類,...