性能優(yōu)化

在Android優(yōu)化從以下四個方面優(yōu)化:
1.穩(wěn)定(內(nèi)存溢出、崩潰)
2.流暢(卡頓)
3.耗損(耗電、流量、網(wǎng)絡)
4.安裝包(APK瘦身)

一、內(nèi)存優(yōu)化

避免內(nèi)存泄漏

內(nèi)存泄漏就是長的生命周期對象持有短的生命周期對象!
長的生命周期:耗時操作
短的生命周期:Activity、Fragment
少量的內(nèi)存泄漏會導致卡頓,內(nèi)存泄漏嚴重會導致OOM

內(nèi)存抖動

短時間內(nèi)內(nèi)存泄漏嚴重,頻繁觸發(fā)GC(GC觸發(fā)的時候會阻塞主線程,會導致界面卡頓,如果GC來不及回收就導致OOM)
GC的觸發(fā)是不定時的,由Java虛擬機控制,但是內(nèi)存不足的時候一定會觸發(fā)

1.1 解決內(nèi)存泄漏

避免常見的內(nèi)存泄漏

Handle導致的內(nèi)存泄漏:

1、發(fā)送延時消息時,當Activity銷毀,Handle沒有移除任務,會造成內(nèi)存泄漏
2、匿名內(nèi)部類導致的內(nèi)存泄漏
解決方案:
使用弱引用WeakReference<OnReceiveMessageListener>包裹對象
將匿名內(nèi)部類用Static修飾,變成靜態(tài)內(nèi)部類


線程導致的內(nèi)存泄漏:

開啟了一個線程做耗時操作,當Activity銷毀的時候,想成任務沒有結(jié)束,就造成了線程的內(nèi)存泄漏
解決方案:
1.在onDestory方法中將線程close掉
2.將線程改為靜態(tài)內(nèi)部類

三方控件未注銷:

1、EventBus注冊卻沒有注銷造成的內(nèi)存泄漏
在onDestory中取消注冊
2、RxJava進行耗時操作,如果沒有解綁會出現(xiàn)內(nèi)存泄漏
在onDestory中使用Disposable對象移除任務

MVP存在內(nèi)存泄漏:

因為context對象使用不當造成的內(nèi)存泄漏

錯誤的使用單例:

在單例中經(jīng)常使用到上下文對象,通常傳的都是Activity的上下文對象
但當Activity銷毀就會出現(xiàn)內(nèi)存泄漏
把Activity的上下文對象換成Application上下文對象

1.2 內(nèi)存泄漏檢測工具:

  • LeakCanary工具 :
    LeakCanary是一個內(nèi)存監(jiān)測工具,該工具是Square公司出品的,
    可以很明確的看出內(nèi)存泄漏的地方
    在Gradle里引用:

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'

  • Memory Monitor 工具:
    Memory Monitor是Android Studio自帶的一個內(nèi)存監(jiān)視工具,它可以很好地幫助我們進行內(nèi)存實時分析。通過點擊Android Studio右下角的Memory Monitor標簽,打開工具可以看見較淺藍色代表free的內(nèi)存,而深色的部分代表使用的內(nèi)存從內(nèi)存變換的走勢圖變換,可以判斷關于內(nèi)存的使用狀態(tài),例如當內(nèi)存持續(xù)增高時,可能發(fā)生內(nèi)存泄漏;當內(nèi)存突然減少時,可能發(fā)生GC等
    當發(fā)生內(nèi)存泄漏的時候無法準確的判斷內(nèi)存泄漏的地方

二、布局優(yōu)化:

  • 布局復用,使用 <include>標簽重用layout;
  • 提高顯示速度,使用 <ViewStub>延遲View加載;
  • 減少層級,使用 <merge>標簽替換父級布局;
  • 注意使用wrap_content,會增加measure計算成本;
  • 刪除控件中無用屬性;

三、啟動優(yōu)化:

應用一般都有閃屏頁,優(yōu)化閃屏頁的 UI 布局,可以通過 Profile GPU Rendering 檢測丟幀情況。
也可以通過啟動加載邏輯優(yōu)化。可以采用分布加載、異步加載、延期加載策略來提高應用啟動速度。
數(shù)據(jù)準備。數(shù)據(jù)初始化分析,加載數(shù)據(jù)可以考慮用線程初始化等策略。

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

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容