Android性能優(yōu)化方法
GPU過度繪制
•打開開發(fā)者選型,“調(diào)試GPU過度繪制”,藍(lán)、綠、粉紅、紅,過度繪制依次加深
•粉紅色盡量?jī)?yōu)化,界面盡量保持藍(lán)綠顏色
•紅色肯定是有問題的,不能忍受
使用HierarchyView分析布局層級(jí)
•刪除多個(gè)全屏背景:應(yīng)用中不可見的背景,將其刪除掉
•優(yōu)化ImageView:對(duì)于先繪制了一個(gè)背景,然后在其上繪制了圖片的,9-patch格式的背景圖中間拉伸部分設(shè)置為透明的,Android 2D渲染引擎會(huì)優(yōu)化9-patch圖中的透明像素。這個(gè)簡(jiǎn)單的修改可以消除頭像上的過度繪制。
•縮短View層級(jí)結(jié)構(gòu) •刪除非必須View,不僅僅能提高幀率還能降低對(duì)內(nèi)存的消耗、同時(shí)還能加速應(yīng)用的啟動(dòng)
•TextView組合圖標(biāo),代替LinearLayout+TextView+ImageView
•使用mearge標(biāo)簽
•使用RelativeLayout扁平化布局
•特別是ListView item布局,一定要扁平化
不要吝嗇發(fā)現(xiàn)Android Device Monitor的功能
•Start Method Profiling •可以觀察每個(gè)線程的方法調(diào)用情況,
•可以通過觀察,方法的調(diào)用次數(shù)、每次方法執(zhí)行時(shí)間
•找到有是否死循環(huán),是否為耗時(shí)操作
使用LeakCanary發(fā)現(xiàn)內(nèi)存溢出
•在開發(fā)階段一定要集成LeakCanary,而且非常容易集成
•及時(shí)發(fā)現(xiàn)Activity頁(yè)面內(nèi)存溢出地方法
•詳細(xì)的內(nèi)存溢出方法跟蹤,便于定位異常點(diǎn)
使用lint工具給APK包減肥
使用OneAPM監(jiān)控App性能
使用SVG代替圖片
•需要和設(shè)計(jì)配合
使用xml代替圖片
代碼規(guī)范制定并遵守
•一致的代碼風(fēng)格,有利于代碼維護(hù)、查看和發(fā)現(xiàn)問題所在
下面在給大家分享Android性能優(yōu)化一些方法
1.采用硬件加速,在androidmanifest.xml中application添加 android:hardwareAccelerated=”true”。不過這個(gè)需要在android 3.0才可以使用。
2.View 中設(shè)置緩存屬性.setDrawingCache為true。
3.優(yōu)化你的布局。通過Android sdk中tools目錄下的layoutopt 命令查看你的布局是否需要優(yōu)化。
4.動(dòng)態(tài)加載View.采用ViewStub 避免一些不經(jīng)常的視圖長(zhǎng)期握住引用。
5.將Acitivity 中的Window 的背景圖設(shè)置為空。getWindow().setBackgroundDrawable(null);android的默認(rèn)背景是不是為空。
6.采用 優(yōu)化布局層數(shù)。 采用來共享布局。
7.查看Heap 的大小。
8.利用TraceView查看跟蹤函數(shù)調(diào)用。有的放矢的優(yōu)化。
9.cursor 的使用。不過要注意管理好cursor,不要每次打開關(guān)閉cursor。因?yàn)榇蜷_關(guān)閉Cursor非常耗時(shí)。Cursor.require用于刷新cursor。
10.采用環(huán)形Buffer(可以采用鏈表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn))??梢栽O(shè)置一個(gè)鏈表長(zhǎng)度的上限,根據(jù)手勢(shì)的變化來不斷地更新環(huán)形Buffer的內(nèi)容。
11.采用SurfaceView在子線程刷新UI, 避免手勢(shì)的處理和繪制在同一UI線程(普通View都這樣做)。
12.采用JNI,將耗時(shí)間的處理放到c/c++層來處理。
13.有些能用文件操作的,盡量采用文件操作,文件操作的速度比數(shù)據(jù)庫(kù)的操作要快10倍左右。
14.懶加載和緩存機(jī)制。訪問網(wǎng)絡(luò)的耗時(shí)操作啟動(dòng)一個(gè)新線程來做,而不要再UI線程來做。
15.消息緩存通過handler.obtainMessage復(fù)用之前的message。
16.文件IO緩存,使用具有緩存策略的輸入流,BufferedInputStream替代InputStream,BufferedReader替代 Reader,BufferedReader替代BufferedInputStream.對(duì)文件、網(wǎng)絡(luò)IO皆適用。例如:
HttpURLConnection con=(HttpURLConnection)url.openConnection();BufferedReader input =newBufferedReader(new InputStreamReader(con.getInputStream()));
Strings;
while((s = input.readLine()) != null) {
}
17.Layout優(yōu)化:使用抽象布局標(biāo)簽(include,viewstub,merge)、去除不必要的嵌套和View節(jié)點(diǎn)、減少不必要的infalte及其他Layout方面可調(diào)優(yōu)點(diǎn),順帶提及布局調(diào)優(yōu)相關(guān)工具 (hierarchy viewer和lint)。
18.TextView屬性優(yōu)化:TextView的android:ellipsize=”marquee”跑馬燈效果極耗性能。
19.使用hashMap代替arrayList,時(shí)間復(fù)雜度降低一個(gè)數(shù)量級(jí)。
相關(guān)文章
Android Studio 1.2版安裝設(shè)置圖文教程
這篇文章主要介紹了Android Studio 1.2版安裝設(shè)置圖文教程,本文詳細(xì)講解了下載、安裝Android Studio 1.2教程,以及常用設(shè)置詳細(xì)圖文教程,需要的朋友可以參考下2015-05-05
DownloadManager實(shí)現(xiàn)文件下載功能
這篇文章主要為大家詳細(xì)介紹了DownloadManager實(shí)現(xiàn)文件下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Json數(shù)據(jù)解析模擬美團(tuán)界面顯示
這篇文章主要介紹了Json數(shù)據(jù)解析模擬美團(tuán)界面顯示,涉及到j(luò)son數(shù)據(jù)解析相關(guān)知識(shí),本文寫的非常不錯(cuò),具有參考價(jià)值,特此分享供大家學(xué)習(xí)2016-01-01
android開發(fā)教程之自定義控件checkbox的樣式示例
這篇文章主要介紹了android自定義checkbox的樣式示例,需要的朋友可以參考下2014-03-03
使用genymotion訪問本地上Tomcat上數(shù)據(jù)的方法
下面小編就為大家?guī)硪黄褂胓enymotion訪問本地上Tomcat上數(shù)據(jù)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03
Android自定義View實(shí)現(xiàn)掃描效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)掃描效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
Android實(shí)現(xiàn)讀寫JSON數(shù)據(jù)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)讀寫JSON數(shù)據(jù)的方法,以完整實(shí)例形式分析了Android解析及生成json數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android自定義View彈性滑動(dòng)Scroller詳解
這篇文章主要為大家詳細(xì)介紹了Android自定義View彈性滑動(dòng)Scroller,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

