資源
RES資源里最應該優(yōu)化的就是圖片了,可以減少安裝包大小罐旗,可以降低app內(nèi)存消耗等士八,一般的優(yōu)化如下:
- png壓縮
如果是png芒珠,且圖片過大牺堰,建議使用Tinypng進行壓縮拄轻。
TinyPng使用智能的有損壓縮算法,通過減少圖片的顏色伟葫,從而在幾乎不影響視覺的情況下恨搓,顯著的減少圖片的體積。
例如:一個2M的圖片可以壓縮到200K扒俯,甚至更小奶卓,且不影響視覺效果。
具體可參考:
http://blog.csdn.net/fuchaosz/article/details/51829662
- 不同drawable目錄適配方案1
為了支持多種屏幕尺寸和密度撼玄,Android 為多種屏幕提供不同的資源目錄進行適配夺姑。
為不同屏幕密度提供不同的位圖可繪制對象,可用于密度特定資源的配置限定符掌猛,
包括 ldpi(低)盏浙、mdpi(中)、 hdpi(高)荔茬、xhdpi(超高)废膘、xxhdpi (超
超高)和 xxxhdpi(超超超高)。
根據(jù)當前的設(shè)備屏幕尺寸和密度慕蔚,將會尋找最匹配的資源丐黄,如果將高分辨率圖片放
入低密度目錄,將會造成低端機加載過大圖片資源孔飒,又可能造成 OOM灌闺,同時也是資
源浪費,沒有必要在低端機使用大圖坏瞄。
3.不同drawable目錄適配方案2
如果資源圖片體積不大桂对,目標手機最低版本設(shè)置較高,如大于4.4等鸠匀,也可以選擇只放置一種drawable圖片蕉斜,如xxxhdpi,
這樣可以帶來的好處就是:減少安裝包大小缀棍,同時美術(shù)人員工作也輕松一些宅此;
帶來的問題:低端手機在對應的drawable目錄下找不到對應的圖片,會使用其他drawable中的圖片爬范,
加載到內(nèi)存并壓縮使用诽凌,也就是在低端手機上增加了額外的內(nèi)存開銷,要小心OOM坦敌。
4.大圖處理
對于一些特大的圖侣诵,如果不是啟動APP必須使用的圖片痢法,也可以放在服務器端,
根據(jù)需要下載并緩存使用杜顺,可減少壓縮包大小财搁。
- 顏色
與圖片相比,我們更應該考慮使用純色躬络、漸變色尖奔、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 結(jié)構(gòu)會性能更好。
理想情況下猜嘱,總共的 measure粹湃,layout,draw 時間應該被很好的控制在 16ms以內(nèi)泉坐,以保證滑動屏幕時 UI 的流暢。
要找到那些多余的 View(增加渲染延遲的 view)裳仆,可以用 Android Studio Monitor
里的 Hierarachy Viewer 工具腕让,可視化的查看所有的 view。
2.過渡繪制
禁止在設(shè)計布局時多次設(shè)置子 view 和父 view 中為同樣的背景造成頁面過
度繪制歧斟,推薦將不需要顯示的布局進行及時隱藏纯丸。
例如:父View加載背景色,子View與其色一致静袖,不需要再為子View設(shè)置背景色觉鼻;
- 靈活使用
靈活使用布局,推薦 Merge队橙、ViewStub 來優(yōu)化布局坠陈,盡可能多的減少 UI
布局層級萨惑,推薦使用 FrameLayout,LinearLayout仇矾、RelativeLayout 次之
- 防止父View頻繁刷新
在需要時刻刷新某一區(qū)域的組件時庸蔼,建議通過以下方式避免引發(fā)全局 layout
刷新:
1) 設(shè)置固定的 view 大小的高寬,如倒計時組件等贮匕;
2) 調(diào)用 view 的 layout 方式修改位置姐仅,如彈幕組件等;
3) 通過修改 canvas 位置并且調(diào)用 invalidate(int l, int t, int r, int b)等方式限定刷新
區(qū)域刻盐;
4) 通過設(shè)置一個是否允許 requestLayout 的變量掏膏,然后重寫控件的 requestlayout、
onSizeChanged 方法 敦锌, 判 斷 控 件 的大小 沒 有 改 變 的 情況下 馒疹, 當 進 入
requestLayout 的時候,直接返回而不調(diào)用 super 的 requestLayout 方法供屉。
請參考自定義控件相關(guān)的文章行冰;
- ScrollView 嵌套禁忌
不能使用 ScrollView 包裹 ListView/GridView/ExpandableListVIew;因為這
樣會把 ListView 的所有 Item 都加載到內(nèi)存中,要消耗巨大的內(nèi)存和 cpu 去繪制圖
面伶丐。
說明:
ScrollView 中嵌套 List 或 RecyclerView 的做法官方明確禁止悼做。除了開發(fā)過程中遇到
的各種視覺和交互問題,這種做法對性能也有較大損耗哗魂。ListView 等 UI 組件自身有
垂直滾動功能肛走,也沒有必要在嵌套一層 ScrollView。目前為了較好的 UI 體驗录别,更貼
近 Material Design 的設(shè)計朽色,推薦使用 NestedScrollView。
- 編碼格式
源文件統(tǒng)一采用 UTF-8 的形式進行編碼组题。
例如:
<?xml version="1.0" encoding="utf-8"?>
第一篇: 安卓編程技巧總結(jié)(1) 資源與UI布局處理
http://www.reibang.com/p/ff97b15d5c9d
第二篇: 安卓編程技巧總結(jié)(2) 基礎(chǔ)組件開發(fā)
http://www.reibang.com/p/b05752377887
第三篇:安卓編程技巧總結(jié)(3) 進程與線程處理
http://www.reibang.com/p/7d05c8a368bd
第四篇:安卓編程技巧總結(jié)(4) 數(shù)據(jù)文件處理
http://www.reibang.com/p/0515df3b697d
第五篇:安卓編程技巧總結(jié)(5) 圖片處理
http://www.reibang.com/p/76690b2ba310
第六篇:安卓編程技巧總結(jié)(6) APP安全分析
http://www.reibang.com/p/4347ff392122