性能優化這塊,分爲UI性能優化、內存優化、數據庫優化、網絡優化、耗電優化等等。能夠從1.如何發現問題,2.怎麼解決問題,3.解決效果對比,這幾個方面去描述。舉個簡單例子——UI優化,能夠從 UI出現什麼問題(卡頓不流暢),怎麼查找問題(手機開發者權限>GPU過分繪製 發現層級問題,TraceView CPU使用狀況分析),怎麼解決問題(下降層級、自定義View繪圖出現問題等),解決問題後性能再次對比。html
a.合理選擇RelativeLayout、LinearLayout、FrameLayout,RelativeLayout會讓子View調用2次onMeasure,並且佈局相對複雜時,onMeasure相對比較複雜,效率比較低,LinearLayout在weight>0時也會讓子View調用2次onMeasure。LinearLayout weight測量分配原則。java
b.使用標籤web
c.減小布局層級,能夠經過手機開發者選項>GPU過渡繪製查看,通常層級控制在4層之內,超過5層時須要考慮是否從新排版佈局。數據庫
d.自定義View時,重寫onDraw()方法,不要在該方法中新建對象,不然容易觸發GC,致使性能降低緩存
e.使用ListView時須要複用contentView,並使用Holder減小findViewById加載View。性能優化
f.去除沒必要要背景,getWindow().setBackgroundDrawable(null)網絡
g.使用TextView的leftDrawabel/rightDrawable代替ImageView+TextView佈局工具
主要爲了不OOM和頻繁觸發到GC致使性能降低佈局
a.Bitmap.recycle(),Cursor.close,inputStream.close()性能
b.大量加載Bitmap時,根據View大小加載Bitmap,合理選擇inSampleSize,RGB_565編碼方式;使用LruCache緩存
c.使用 靜態內部類+WeakReference 代替內部類,如Handler、線程、AsyncTask
d.使用線程池管理線程,避免線程的新建
e.使用單例持有Context,須要記得釋放,或者使用全局上下文
f.靜態集合對象注意釋放
g.屬性動畫形成內存泄露
h.使用webView,在Activity.onDestory須要移除和銷燬,webView.removeAllViews()和webView.destory()
備:使用LeakCanary檢測內存泄露
Activity若是5秒以內沒法響應屏幕觸碰事件和鍵盤輸入事件,就會出現ANR,而BroadcastReceiver若是10秒以內還未執行操做也會出現ANR,Serve20秒會出現ANR 爲了不ANR,能夠開啓子線程執行耗時操做,可是子線程不能更新UI,所以須要Handler消息機制、AsyncTask、IntentService進行線程通訊。
備:出現ANR時,adb pull data/anr/tarces.txt 結合log分析
a.常量使用static final修飾
b.使用SparseArray代替HashMap
c.使用線程池管理線程
d.ArrayList遍歷使用常規for循環,LinkedList使用foreach
e.不要過分使用枚舉,枚舉佔用內存空間比整型大
f.字符串的拼接優先考慮StringBuilder和StringBuffer
g.數據庫存儲是採用批量插入+事務
https://www.jianshu.com/p/6d855e984b99
https://blog.csdn.net/hanchendong/article/details/61920501
https://blog.csdn.net/jiankeufo/article/details/79277063
http://www.javashuo.com/article/p-pytjtdfs-ku.html
第一篇簡單回顧java的內存區域劃分、引用、內存泄露以及場景,還有垃圾回收
第二篇主要是使用過Android Studio自帶工具Memory Monitor 檢測內存泄露
接上一篇,介紹另一種內存泄露的檢測工具MAT
學習一下Android渲染機制,爲何16ms沒完成繪製就會卡頓?
Allaction Tracing是追蹤內存分配的工具,能夠很直觀的看到某個操做是如何一步步分配的
TraceView 是 Android 平臺特有的數據採集和分析工具,主要用作熱點分析,找出最須要優化的點。我就是靠它將我公司的項目的啓動速度明顯的提升了。
StrictMode意思爲嚴格模式,是用來檢測程序中違例狀況的開發者工具。使用通常是場景是檢測主線程中本地磁盤和網絡讀寫等耗時的操做。注意這個StrictMode是在Anroid2.3之後引入的。嚴格模式主要檢測兩大問題,一個是線程策略,即TreadPolicy,另外一個是VM策略,即VmPolicy。
介紹如何統計應用的啓動時間和性能檢查項,而且用TraceView逐個修復
由於啓動頁通常View的數量比較少,業務邏輯比較簡單,啓動不太費勁,可是該怎麼寫啓動頁面讓應用的啓動速度更快呢?
Android系統每隔16ms就從新繪製一次Activity,若是沒有完成就會有丟幀的現象。爲了減輕UI繪製的負擔,有必要把Layout編寫的一些注意事項總結一下
說到應用的流暢度,都會想到FPS,FPS評測應用流暢度不許確,系統獲取FPS的原理是:手機屏幕顯示的內容是經過Android系統的SurfaceFLinger類,把當前系統裏全部進程須要顯示的信息合成一幀,而後提交到屏幕上進行顯示,FPS就是1秒內SurfaceFLinger提交到屏幕的幀數。可是用FPS來評測一個應用是否真的卡頓存在兩個問題,咱們可使用Choreographer幀率檢測。