編輯:關於Android編程
我自己寫下Google關於Android性能優化的視頻課程的翻譯,希望轉載者不要刪除我的博客地址http://blog.csdn.net/zhjali123
1.texture、meshes。舉個例子,做一個飛機模型,你要先雕刻出立體的飛機模型(mesh),但是模型還沒有上色,這是你要用張紙把它包起來,在上面畫迷彩,這層有迷彩的紙就是(texture,中文叫紋理)。
1.Android設備通常16ms 更新下Activity,具體取決於手機硬件。這意味著你要在16ms內處理你所有的繪畫邏輯。如果你錯過了這個16ms,頁面不會繪制,這就叫做 dropped frame。然而動畫的運算並不會停止,所以呈現給用戶的就是在平滑性上發生了跳躍。這就叫做laggy或者janky體驗。
2.Android的渲染通道分為兩個關鍵區域:CPU和GPU。
CPU(measure測量-->layout布局--->record記錄--->execute執行)---->GPU(rasterization光柵化:計算每一個像素點的值)
CPU的問題:不必要的layout,視圖層次(View Hierachy)中無意義的計算、拆分(torn down)、重建(rebuilt)
XML轉換到屏幕顯示的原理過程:
XML----轉換---->Screen,核心步驟:rasterization光柵化(如圖)。Rasterization是非常的消耗資源,所以上個世紀90年代引入了單獨的圖像處理單元GPU。GPU使用一些指定的基礎指令集(set of primitive: polygons多邊形,textures 文理,images 圖像),而CPU在畫東西到屏幕前,會給GPU輸入這些指令(a set of primitive)。這一過程通常使用的API就是Android的OpenGL ES。
這意味著如果畫一個button,他會在CPU中先轉化為polygons多邊形、texture紋理((computer graphics) An image applied to a polygon to create the appearance of a surface:圖像被添加到一個多邊形上來創造事物的外觀)------------》傳遞給GPU進行rasterization光柵化。
其中有兩處耗時操作:
1.在CPU中將button等事物 轉換成相應的形狀(polygons),繪制它的表面(texture)
2.CPU將數據傳送GPU
對應措施:
你要減少CPU中繪制的事物和CPU往GPU上載數據,而OpenGL ES提供了向GPU上傳數據和保存數據的API。所以,當你下次繪制一個button時,你只需要在GPU中引用它(也就是在GPU中完成polygons、texture),告訴OpenGL如何進行繪制它。一條經驗之談就是:優化渲染的性能意味著,盡可能快的上傳數據到GPU和在GPU上盡可能長的保留數據。
從HoneyComb版本開始,整個View的渲染就在GPU中,並不斷優化,所以你不用關心這個。例如:任何你的theme提供的資源如Bitmaps、Drawables等,被整合到一個單獨的texture(感覺就是事物表面的意思)中,然後使用meshes上傳到GPU像是點9圖。這樣每次你需要繪制這些資源時,你就不用做任何轉換,他們已經存儲在GPU中了。
然而隨著UI事物更加先進,繪制流程也更加復雜。例如繪制一個image,這意味著上傳Image到CPU再到GPU。使用Path則完全不同,你需要在CPU中創建一連串的polygons多邊形,甚至在GPU中創建masking texture(蒙版紋理)來定義path。繪制字符,首先你必須在CPU中將繪制image---》上傳到GPU---》在屏幕上繪制每一個字符串中字符的正方形,這些都被Android系統所處理。而這存在程序員都會遇的GPU問題OverDraw(過度繪制)
今天晚上在繼續翻譯吧!
(1)Android Studio菜單Build->Generate Signed APK(2)彈出窗口(3)創建密鑰庫及密鑰,創建後會自動選擇剛創建的密鑰庫和密鑰
我們寫程序的時候都希望能寫出一個沒有任何Bug的程序,期望在任何情況下都不會發生程序崩潰。不過理想是豐滿的,現實是骨感的。沒有一個程序員能保證自己寫的程序絕對不會出現異常
Fragment與Activity之間的數據交換,大體上包括三種: 一、Fragment從Activity獲取數據(本文章只介紹第一種); 二、Activity從Frag
一 、 虛擬機的安裝常見的虛擬機產品有 VMware 公司的 VMware Workstation、Oracle 公司的 VirtualBox。因為 VMware 體積相