北京網站優化,品牌推廣,北京網站建設公司,朗創營銷歡迎您 ! 在線留言|收藏本站|網站地圖

北京朗創營銷

幫助企業快速提升網絡營銷業績專注網站建設,SEO關鍵詞排名,一切用數據說話 !

咨詢電話:133-8117-0961

您的位置: 朗創網絡營銷 > 媒體報道 >

谷歌發布Android性能優化范例

作者: admin 來源:北京網站優化 發布日期: 2018-08-22
信息摘要:
如果其中一個操作需要24毫秒,當系統得到VSYNC信號時,系統不能正常渲染,因此發生幀丟失,然后用戶將在32毫秒內看到相同的
如果其中一個操作需要24毫秒,當系統得到VSYNC信號時,系統不能正常渲染,因此發生幀丟失,然后用戶將在32毫秒內看到相同的幀。

在一個多層的UI結構中,如果不可見的UI也在進行繪圖操作,這將導致一些像素區域被多次繪制,這浪費了大量的CPU和GPU資源。

當我們在設計中追求更華麗的視覺效果時,往往會陷入使用越來越多的級聯組件來實現這種視覺效果的怪圈中,這很容易導致很多性能問題,為了獲得最佳性能,我們必須盡量減少O的出現。F透支。

幸運的是,我們可以通過在手機內設置開發選項并打開顯示GPU透支選項來查看UI上的透支。

藍色、淺綠色、淺紅色和深紅色代表四種不同的透支水平,我們的目標是盡量減少紅色透支和更多的藍色區域。

要理解應用程序是如何呈現的,我們必須了解電話硬件是如何工作的,然后我們必須了解VSyc是什么。

刷新率:表示屏幕刷新的次數,取決于固定的硬件參數,如60Hz。

GPU采用圖形數據進行渲染,硬件負責將渲染的內容渲染到屏幕上,兩者一起工作。

不幸的是,刷新率和幀速率并不總是保持相同的節奏,如果幀速率與刷新頻率不一致,則容易出現撕裂現象(屏幕顯示內容的上下部分,從兩個不同的數據重疊幀中斷)。)

理解圖像渲染中的雙重和三重緩存機制是一個復雜的概念,所以請看這里:這里。

一般來說,幀速率超過刷新頻率是理想的情況。在超過60個FPS的情況下,GPU生成的幀數據將保持等待VSYNC刷新信息,以便可以在每次刷新時顯示實際的新數據,但是我們遇到的情況比刷新率要多。

在這種情況下,在某些幀中顯示的幀的內容將與前一幀中的幀相同。壞的是,幀速率從60 fps突然下降到低于60 fps,這可能導致滯后、JANK、HOTCH和其他紙盒的非光滑幀下降的發生。河北做網站這也是用戶感覺不好的原因。

性能問題是如此麻煩。幸運的是,我們可以調試工具。打開手機上的開發選項,選擇PrPrPGPU渲染,并在屏幕上選擇為酒吧。

有了這個選項,我們可以看到豐富的GPU渲染信息在電話屏幕上,分別是關于GPU更新信息的StasBar,Navar,激活程序活動區。

當界面刷新時,滾動垂直條圖以顯示每個幀所需的渲染時間,并且條形圖越高,渲染時間越長。

中間有一條綠色的水平線,代表16Ms。我們需要確保每一幀上花費的總時間低于這個水平線,這樣我們就可以避免紙箱的問題。

每一列包含三個部分。藍色表示顯示列表的渲染所需的時間,紅色表示OpenGL呈現顯示列表所需的時間,黃色表示CPU等待GPU處理的時間。

我們通常會談論60fps和16Ms,但是你知道為什么它是基于程序是否達到60fps的應用程序性能度量這是因為人腦和大腦之間的協作不能感知超過60fps的更新。

開發應用程序的性能目標是保持60fps,這意味著每個幀只有16MS=1000 / 60來處理所有任務。

了解Android如何使用GPU進行渲染有助于我們更好地理解性能問題。因此,最實際的問題是:如何將活動畫面繪制到屏幕上如何識別和繪制那些復雜的XML布局文件

柵格化光柵化是繪制諸如按鈕、形狀、路徑、字符串、位圖等組件的最基本操作,它將這些組件拆分到不同的像素進行顯示,這是一個耗時的操作。GPU的引入是為了加速光柵化操作。

然而,每次從CPU移動到GPU,這是一個很大的麻煩。幸運的是,OpenGL ES可以將那些需要保存在GPU內存中的紋理保存起來,并在下一次渲染時直接對它們進行操作。因此,如果更新GPU保持的紋理內容,則保存的狀態就會丟失。

為了使應用程序平滑,我們需要在每個幀的16毫秒內處理所有CPU和GPU計算、渲染等。

平滑和微妙的動畫是應用程序設計中最重要的元素之一,這些動畫可以顯著增強用戶體驗。接下來,我們將解釋Android系統如何處理UI組件的更新操作。

一般來說,Android需要將XML布局文件轉換成GPU可以識別和繪制的對象。這個操作是在DeStudiList.DelpRead中完成的,所有的數據都將被送到GPU來繪制到屏幕上。

性能問題的一個非常重要的方面是由于太多復雜的渲染操作。我們可以使用工具來檢測和修復標準UI組件的過度繪制問題,但是對于高度定制的UI組件來說,這有點過激。

除了Cclipse方法之外,我們還可以使用它來確定矩形是否不相交,從而跳過非矩形區域中的繪圖操作。在優化之后,我們可以通過上面介紹的GPU超圖來看到效果。

雖然Android有一個自動內存管理機制,但是內存的不正確使用仍然會導致嚴重的性能問題。在同一幀中創建太多對象是一個特別感興趣的問題。

除了速度差之外,在執行GC操作時,任何線程上的任何操作都需要暫停,等待GC操作在其他操作繼續運行之前完成。

一般來說,單個GC不占用很多時間,但是大量的非停止GC操作可以顯著占用幀間隔(16MS)。如果在幀間隔中執行太多GC操作,那么自然地可以使用其他運算,例如計算、渲染等。SS時間。

有一種直觀且直觀的方法來解決上述問題,如果在內存監視器中在短時間內看到多個內存顛簸,則意味著內存抖動很可能發生。

我們也可以使用分配跟蹤器查看相同的對象,這些對象在短時間內不斷地在同一堆棧中移動,這是內存抖動的典型信號之一。

每個級別的內存區域具有固定的大小,并且新的對象被連續地分配到該區域。當這些對象的總大小達到該內存區域的閾值時,觸發GC操作,以便為其他新對象騰出空間。

雖然Java有一個自動恢復機制,但這并不意味著Java中沒有內存泄漏,這很容易導致嚴重的性能問題。

內存泄漏指的是不再被GC識別的程序所使用的對象,從而使對象保留在內存中并占據有價值的內存空間。顯然,這也使得每個生成級別的內存區域更小,使得GC更容易。被觸發,造成性能問題。

如果在空白活動內存快照中發現可疑的未發布對象,則應使用定位跟蹤工具仔細查找特定可疑對象。我們可以從空白活動開始監聽,開始觀察活動,然后返回空白活動結束收聽。手術后,我們可以仔細觀察對象,找出內存泄漏的真正兇手。

一般來說,Android在GC上做了很多優化,雖然在執行GC操作時其他任務被暫停,但是GC操作在大多數情況下相對安靜和高效,但是如果我們不正確地使用內存,導致GC的頻繁執行,這將導致大量的PFF。奧秘問題。

內存監視器:查看應用程序作為一個整體所使用的內存,并且在GC出現時,這是一個危險的信號,即大量的GC操作在短時間內發生。

堆工具:請參閱當前內存快照,以便比較分析哪些對象可能泄漏,參見前面的情況。

電力實際上是當今手持式設備最寶貴的資源之一,大多數設備都需要不斷的充電來保持它們的使用。不幸的是,對于開發人員來說,電力優化是他們最不愿意考慮的事情。但是你可以確信你不能讓你的應用變成一個。大量的電力消費。

我們應該盡量減少喚醒屏幕的數量和持續時間,使用WakeLock來處理喚醒問題,能夠正確地執行喚醒操作,并根據設置關閉睡眠操作。

不需要立即執行的一些操作,例如上傳歌曲、圖像處理等,只能在設備負責或有足夠的功率時才執行。

觸發網絡請求的操作將每次保持無線信號一段時間。我們可以將分散的網絡請求打包成一個操作,以避免由過量的無線信號引起的功耗,也可以參考由網絡請求引起的無線信號的功耗。

通過設置手機選項,我們可以找到與應用程序相對應的功耗統計,也可以通過電池歷史工具查看詳細的功耗。

如果我們發現我們的應用程序被壓縮了,我們可以使用作業調度程序API來調度任務,例如在電話充電時等待繁重的任務,或者連接到WiFi。更多的關于JobScheduler的信息可以用于參考。

耗電量的計算和統計是一個麻煩而矛盾的問題,記錄用電本身就是一個耗電問題,唯一可行的解決辦法是使用第三方監測裝置,從而獲得實際的電力消耗。

當設備處于待機狀態時,功耗非常小,例如N5、開放飛行模式、待機近一個月。但是當屏幕亮起來時,硬件的每個模塊都需要開始工作,這將消耗大量的電能。

在喚醒設備使用WaCKORK或JobScheduler處理定時任務后,一定要及時將設備恢復到原來的狀態。每個喚醒無線信號用于數據傳輸,將消耗大量的功率,它比WiFi和其他操作消耗更多的電力,請支付AT10。細節

有效地保留更多的電力,并不斷敦促用戶使用你的應用程序來消耗電力是矛盾的選擇。但是我們可以用更好的方法來平衡兩者。

這正是JobScheduler API所做的。它將期望的喚醒時間與當前的任務和任務相結合,例如等待被充電或連接到WiFi,或者集中在一起的任務。通過這個API,我們可以實現許多自由調度算法。

自Android 5發布的電池歷史工具可以讓你看到程序醒來的時間,醒來的時間,持續時間。

注意程序的功耗。用戶可以通過手機的設置來觀察電力用戶,并決定卸載它們,因此有必要最小化程序的功耗。

咨詢熱線

400-880-6422
午夜爱爱爱爱爽爽爽网站,xxxxx,年轻的母亲在线观看,最近更新中文字幕2019国语