Android開發者選項 Gpu呈現模式分析

2021-09-20 14:49:58 字數 2057 閱讀 5217

對於android使用者來說,無論你用的什麼品牌的手機,在開發者選項中都能發現「玄學曲線」的開關,之所以稱其為玄學曲線,還是因為它被很多網友用於測試乙個說不清道不明的東西——流暢度。到底多流暢才叫流暢,多卡才叫卡,標準是什麼?用玄學曲線判斷流暢度到底靠不靠譜兒?今天,就教你如何看懂這玄學曲線。

說到玄學曲線其實它的真名叫做「profile gpu rendering」,在中文安卓系統下譯為「gpu顯示配置檔案」或「gpu呈現模式分析」等,根據不同廠商定製系統叫法稍有不同。在開啟開發者模式後,找到該條目並選擇第二項「條形顯示」即可看到,不少網友樂此不疲將該曲線發到網上展示,時不時還能看到配字「我的xx這麼貴,刷微博竟然這麼卡」,或是「為什麼剛更新了android 5.0怎麼曲線還這麼高?」。其實,一些網友並沒有完全理解它而已,有時曲線蹦的高,並不代表卡了。

開啟玄學曲線後,我們能看到螢幕下方出現連續的柱狀圖,每一根都由紅、黃、藍三色組成,它們分別代表不同含義後面詳細講。除了曲線外,在螢幕上你還可以看到一根水平的綠線,要看懂玄學曲線就要從這根綠線說起。

綠色水平線標示了16毫秒的位置

首先,在android系統中是以每秒60幀為滿幀的,那麼只要將1秒÷60幀,就能得出每幀為16毫秒(ms)時為滿幀的界限,每幀快於16ms即為流暢,而這根綠線所標示的高度即為16ms線,低於綠線即為流暢。

然後,螢幕下方的柱狀圖每一根代表一幀,其高度表示「渲染這一幀耗時」,隨著手機螢幕介面的變化,柱狀圖會持續重新整理每幀用時的具體情況(通過高度表示)。那麼,當柱狀圖高於綠線,是不是就說明我卡了呢?其實這不完全正確,這裡就要開始分析組成每一根柱狀圖不同顏色所代表的含義了。

cpu無法直接將命令發給gpu首先要明白,gpu要繪製什麼樣的檢視是需要cpu發出指令的,但cpu不會直接告訴gpu怎麼做,而是會先將這一命令存入乙個「盒子」,在盒子中會形成乙個列表,然後gpu從盒子中取出命令進行檢視的渲染繪製。

明白了上面的過程,下面就該說說圖中不同顏色到底代表了什麼含義。

刷**時可見紅色部分很高

黃色部分通常較短

黃色通常較短,它代表著cpu通知gpu「你已經完成檢視渲染了」,不過在這裡cpu會等待gpu的回話,當gpu說「好的知道了」,才算完事兒。假如橙色部分很高的話,說明當前gpu過於忙碌,有很多命令需要去處理,比如android**客戶端,紅色黃色通常會很高。

藍線過長說明掉幀了

藍色。假如想通過玄學曲線來判斷流暢度的話,其實藍色的參考意義是較大的。藍色代表了檢視繪製所花費的時間,表示檢視在介面發生變化(更新)的用時情況。當它越短時,即便是體驗上更接近「絲滑」,當他越長時,說明當前檢視較複雜或者無效需要重繪,即我們通常說的「卡了」。

理解了玄學曲線不同顏色代表的意義,看懂玄學曲線就不難了。一般情況下,當藍色低於綠線時都不會出現卡頓,但是想要追求真正的絲般順滑那當然還是三色全部處於綠線以下最為理想。

gif圖會影響玄學曲線

最後,玄學曲線到底適不適合判斷手機的流暢度呢?其實,就如開啟時他被藏在「開發者選項中」那樣,它其實是用來幫助android開發者找到介面中渲染問題的小工具,當他們發現曲線出現異常時,就該去做調整和優化了,為使用者提供更好體驗。所以,將profile gpu rendering用於測試手機流暢度其實是個小誤區,你的手機不流暢也可能是當前檢視不合理所致,並非效能不足。

特別注意:

獨立的android開發者開發app如何盈利?

一 開發方面 總結重要經驗 3.學會適當的放棄,不然會浪費很多精力。二 使用者方面 怎麼樣得到使用者?只有一條路 推廣!總結重要經驗 2.推廣一定要重點推,論壇發帖格式要美觀。三 收入方面 雖然最近都沒有更新版本,但積分牆廣告的收入並沒有下降,我認為我的積分設定的比較合理,讓使用者持續消費積分。我使...

TUP首期幫Android開發者「突圍」

萬眾期待的 tup首期移動開發實踐活動終於如期舉行啦!雖然是週末,但是仍有大批移動開發從業者和愛好者前來參加。活動開始簽到不到一刻鐘,現場已座無虛席,很多參會者站著聽完了全部內容。活動現場座無虛席 圍繞android平台與手機遊戲,邀請到的嘉賓為開發者們獻計獻策 姚尚朗 演講資訊量非常大,分享了傳統...

給android開發者的幾個建議

1 首先要有良好的編碼習慣 乙個優秀的開發者應該善於運用常識 完善的演算法和標準設計模式。要有資源意識,開啟了就要記得關閉,盡量做到晚獲取,早釋放。這些由來已久的編碼準則同樣適用android應用開發,尤其是使用基礎裝置服務時。2 讓阻塞操作遠離主ui執行緒 通過使用asynctask 執行緒 in...