Android:性能優化!!!

佈局優化

核心思想:減小布局的層級面試

優化方式:緩存

  • 多嵌套狀況可使用RelativeLayout減小嵌套。性能優化

  • 佈局層級相同狀況下優先使用LinearLayout,比RelativeLayout高效。多線程

  • 使用**增長佈局複用,減小布局層級,**懶加載。架構

繪製優化

核心思想:避免在**View.onDraw()**執行大量操做佈局

優化方式:性能

  • 避免建立新的局部對象,由於在**onDraw()**可能被屢次調用產生大量的臨時對象,致使佔用過多的內存、系統頻繁gc,下降執行效率。
  • 避免作耗時任務,以及大量循環操做。

內存優化

內存泄露:程序在申請內存後,沒法釋放內存,產生的垃圾內存優化

內存溢出(OOM):是指內存申請的內存超過系統指定的內存,內存泄露過多也會致使內存溢出動畫

優化方式:this

1.靜態變量致使的內存泄露:

  • 詳情:非靜態內部類中一個靜態變量被外部類持有,致使外部的Activity沒法被回收
  • 解決:靜態內部類 不默認持有外部類的引用,將內部類設爲靜態內部類或獨立出來;使用context.getApplicationContext()

2.單例模式致使內存泄露:

  • 詳情:單例模式的this來自Activity,致使對Activity的持有,Activity沒法被回收
  • 解決:參數context.getApplicationContext()

3.屬性動畫致使內存泄露:

  • 詳情:沒有在onDestroy()中中止屬性動畫,致使View持有了Activity
  • 解決:在onDestroy()中中止動畫

4.Handler致使內存泄露:

  • 詳情:非靜態內部類的Handler會隱式持有外部類Activity的引用,而Message會持有對Handler的引用,致使引用關係會保持到消息被處理,從而阻止了Activity的回收
  • 解決:使用靜態內部類+WeakReference弱引用,當外部類結束生命週期及時清空消息隊列。
  • 參考

5.線程致使的內存泄露:

  • 詳情:AsyncTask/Runnable以匿名內部類的方式存在,會隱式持有對所在Activity的引用。

  • 解決:使用靜態內部類,線程內使用弱引用

6.資源未關閉致使內存泄露:

  • 詳情:好比BroadcastReceiver、File、Cursor、IO流、Bitmap等
  • 解決:及時回收關閉資源

7.ListView中Adapter致使的內存泄露:

  • 詳情:不使用緩存只依靠getView()致使每次都須要從新初始化Item
  • 解決:使用convertView複用

響應速度優化

  • Application中避免耗時操做,耗時任務放在IntentService中。
  • 啓動頁白屏問題,能夠給啓動頁設置style樣式防止白屏問題,同時能夠添加過渡動畫,增長視覺效果。
  • 避免主線程作耗時操做,開啓多線程。

線程優化

  • 使用線程池,避免大量建立Thread

最後送福利了,如今關注我而且加入羣聊能夠獲取包含源碼解析,自定義View,動畫實現,架構分享等。 內容難度適中,篇幅精煉,天天只需花上十幾分鍾閱讀便可。 你們能夠跟我一塊兒探討,歡迎加羣探討,有flutter—性能優化—移動架構—資深UI工程師 —NDK相關專業人員和視頻教學資料,還有更多面試題等你來拿~ 羣號:661841852

image
QQ截圖20190510143109.jpg
點擊連接加入羣聊【Android開發行業交流】: jq.qq.com/?_wv=1027&a…
相關文章
相關標籤/搜索