安卓編程技巧總結(1) 資源與UI布局處理


資源

RES資源里最應該優(yōu)化的就是圖片了,可以減少安裝包大小,可以降低app內存消耗等,一般的優(yōu)化如下:

  1. png壓縮
如果是png,且圖片過大,建議使用Tinypng進行壓縮。
TinyPng使用智能的有損壓縮算法,通過減少圖片的顏色,從而在幾乎不影響視覺的情況下,顯著的減少圖片的體積。
例如:一個2M的圖片可以壓縮到200K,甚至更小,且不影響視覺效果。

具體可參考:
http://blog.csdn.net/fuchaosz/article/details/51829662

  1. 不同drawable目錄適配方案1
為了支持多種屏幕尺寸和密度,Android 為多種屏幕提供不同的資源目錄進行適配。
為不同屏幕密度提供不同的位圖可繪制對象,可用于密度特定資源的配置限定符,
包括 ldpi(低)、mdpi(中)、 hdpi(高)、xhdpi(超高)、xxhdpi (超
超高)和 xxxhdpi(超超超高)。
根據(jù)當前的設備屏幕尺寸和密度,將會尋找最匹配的資源,如果將高分辨率圖片放
入低密度目錄,將會造成低端機加載過大圖片資源,又可能造成 OOM,同時也是資
源浪費,沒有必要在低端機使用大圖。

3.不同drawable目錄適配方案2

如果資源圖片體積不大,目標手機最低版本設置較高,如大于4.4等,也可以選擇只放置一種drawable圖片,如xxxhdpi,
這樣可以帶來的好處就是:減少安裝包大小,同時美術人員工作也輕松一些;
帶來的問題:低端手機在對應的drawable目錄下找不到對應的圖片,會使用其他drawable中的圖片,
加載到內存并壓縮使用,也就是在低端手機上增加了額外的內存開銷,要小心OOM。

4.大圖處理

對于一些特大的圖,如果不是啟動APP必須使用的圖片,也可以放在服務器端,
根據(jù)需要下載并緩存使用,可減少壓縮包大小。
  1. 顏色
與圖片相比,我們更應該考慮使用純色、漸變色、shape等來實現(xiàn)想要的效果。

布局

1.布局嵌套

布局中不得不使用 ViewGroup 多重嵌套時,不要使用 LinearLayout 嵌套,
改用 RelativeLayout,通過其相對屬性進行合理控制,可以有效降低嵌套數(shù)。

Android 應用頁面上任何一個 View 都需要經(jīng)過 measure、layout、draw 三個步驟
才能被正確的渲染。
從 xml layout 的頂部節(jié)點開始進行 measure,每個子節(jié)點都需
要向自己的父節(jié)點提供自己的尺寸來決定展示的位置,在此過程中可能還會重新
measure(由此可能導致 measure 的時間消耗為原來的 2-3 倍)。
節(jié)點所處位置越深,套嵌帶來的 measure 越多,計算就會越費時。
這就是為什么扁平的 View 結構會性能更好。
理想情況下,總共的 measure,layout,draw 時間應該被很好的控制在 16ms以內,以保證滑動屏幕時 UI 的流暢。

要找到那些多余的 View(增加渲染延遲的 view),可以用 Android Studio Monitor
里的 Hierarachy Viewer 工具,可視化的查看所有的 view。

2.過渡繪制

禁止在設計布局時多次設置子 view 和父 view 中為同樣的背景造成頁面過
度繪制,推薦將不需要顯示的布局進行及時隱藏。

例如:父View加載背景色,子View與其色一致,不需要再為子View設置背景色;
  1. 靈活使用
靈活使用布局,推薦 Merge、ViewStub 來優(yōu)化布局,盡可能多的減少 UI
布局層級,推薦使用 FrameLayout,LinearLayout、RelativeLayout 次之
  1. 防止父View頻繁刷新
在需要時刻刷新某一區(qū)域的組件時,建議通過以下方式避免引發(fā)全局 layout
刷新:
1)  設置固定的 view 大小的高寬,如倒計時組件等;
2)  調用 view 的 layout 方式修改位置,如彈幕組件等;
3)  通過修改 canvas 位置并且調用 invalidate(int l, int t, int r, int b)等方式限定刷新
區(qū)域;
4)  通過設置一個是否允許 requestLayout 的變量,然后重寫控件的 requestlayout、
onSizeChanged 方法 , 判 斷 控 件 的大小 沒 有 改 變 的 情況下 , 當 進 入
requestLayout 的時候,直接返回而不調用 super 的 requestLayout 方法。

請參考自定義控件相關的文章;
  1. ScrollView 嵌套禁忌
不能使用 ScrollView 包裹 ListView/GridView/ExpandableListVIew;因為這
樣會把 ListView 的所有 Item 都加載到內存中,要消耗巨大的內存和 cpu 去繪制圖
面。
說明:
ScrollView 中嵌套 List 或 RecyclerView 的做法官方明確禁止。除了開發(fā)過程中遇到
的各種視覺和交互問題,這種做法對性能也有較大損耗。ListView 等 UI 組件自身有
垂直滾動功能,也沒有必要在嵌套一層 ScrollView。目前為了較好的 UI 體驗,更貼
近 Material Design 的設計,推薦使用 NestedScrollView。
  1. 編碼格式
源文件統(tǒng)一采用 UTF-8 的形式進行編碼。
例如:
<?xml version="1.0" encoding="utf-8"?>

第一篇: 安卓編程技巧總結(1) 資源與UI布局處理

http://www.itdecent.cn/p/ff97b15d5c9d

第二篇: 安卓編程技巧總結(2) 基礎組件開發(fā)

http://www.itdecent.cn/p/b05752377887

第三篇:安卓編程技巧總結(3) 進程與線程處理

http://www.itdecent.cn/p/7d05c8a368bd

第四篇:安卓編程技巧總結(4) 數(shù)據(jù)文件處理

http://www.itdecent.cn/p/0515df3b697d

第五篇:安卓編程技巧總結(5) 圖片處理

http://www.itdecent.cn/p/76690b2ba310

第六篇:安卓編程技巧總結(6) APP安全分析

http://www.itdecent.cn/p/4347ff392122

第七篇:安卓編程技巧總結(7) 性能檢測代碼分析

http://www.itdecent.cn/p/687f3c641408

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容