日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Android性能优化

發(fā)布時間:2025/7/25 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android性能优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Android性能優(yōu)化

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

1、優(yōu)化方式:

  • 減少不必要嵌套,盡可能使用LinearLayout、ConstraintLayout等控件
  • 減少顏色覆蓋,子控件背景足夠,不要在其父控件加顏色
  • 使用include、merge、ViewStub
    • include:布局復(fù)用
    • merge:去除多余層級
    • ViewStub:按需加載,當(dāng)調(diào)用setVisibility或者inflate方法時才將布局加載到內(nèi)存中

2、檢查方式:

一般打開開發(fā)者選項中,調(diào)戲GPU過渡繪制的按鈕,通過查看布局顏色深度來檢查過渡繪制的情況

二、繪制優(yōu)化:

每幀繪制時間不超過16ms
1、優(yōu)化方式:

  • 減少在onDraw方法做耗時操作(循環(huán)等)
  • 大量創(chuàng)建局部對象,因為onDraw會頻繁調(diào)用,導(dǎo)致產(chǎn)生大量臨時對象,引起過多占用內(nèi)存和頻繁GC

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

  • 避免內(nèi)存泄漏的出現(xiàn)
  • 線程優(yōu)化:使用線程池
  • 壓縮Bitmap
  • 不要通過Intent傳遞大數(shù)據(jù)(1MB)
  • 頁面退出時注意清理動畫、回收圖片資源等 1、內(nèi)存泄漏
    無用對象的內(nèi)存得不到及時釋放。因為長生命周期的對象持有短生命周期的引用,導(dǎo)致短生命周期的對象無法被回收。

2、常見內(nèi)存泄漏:

  • 集合對象泄漏
  • 靜態(tài)變量、單例持有對象
  • 非靜態(tài)內(nèi)部類、匿名內(nèi)部類持有外部類引用
  • 資源未關(guān)閉

3、舉例說明:

(1) 靜態(tài)集合:

public static List<Object> sObjects = new ArrayList<>();public void newList(){for (int i = 0; i < 100; i++) {sObjects.add(new Object());} } 復(fù)制代碼

靜態(tài)集合只有多個對象,導(dǎo)致沒法被回收
解決方式:使用完畢后將集合清理

sObjects.clear();sObjects = null; 復(fù)制代碼

(2)單例:

public class SingleInstance {private static SingleInstance sInstance;private Context mContext;private SingleInstance(Context context){this.mContext = context;}public static synchronized SingleInstance getInstance(Context context) {if (sInstance == null) {return new SingleInstance(context);}return sInstance;} } 復(fù)制代碼

單例生命周期為全局的,如果傳入的Context為Activity,導(dǎo)致Activity無法回收。
解決方式:使用ApplicationContext

public static synchronized SingleInstance getInstance(Context context) {if (sInstance == null) {return new SingleInstance(context.getApplicationContext());}return sInstance;} 復(fù)制代碼

(3)、靜態(tài)、匿名內(nèi)部類:

public class HandleActivity extends Activity{@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);}} } 復(fù)制代碼

常用的創(chuàng)建一個Handler子類,為非靜態(tài)內(nèi)部類,會持有外部類(Activity)的引用,導(dǎo)致Activity無法被回收。
解決方式:將MyHandler改為靜態(tài)內(nèi)部類,自動不會持有外部類的應(yīng)用。
可能的問題:如果需要在Handler持有Activity(例如更新UI)
處理方式:使用弱引用(GC的時候無論是否被持有都會被回收),根據(jù)實際應(yīng)用場景使用。

static class MyHandler extends Handler{//使用弱引用,GC的使用Activity可被回收WeakReference<HandleActivity> activity;MyHandler(HandleActivity activity) {this.activity = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);} } 復(fù)制代碼

(4)資源未關(guān)閉:

  • 網(wǎng)絡(luò)、文件流、數(shù)據(jù)庫Cursor等
  • 廣播取消注冊,EventBus取消注冊等

4、泄漏檢查方式:
可集成LeakCanary檢測、使用Memory Monitor或者使用Android studio中的Android Profiler檢測。

四、響應(yīng)速度優(yōu)化:

1、應(yīng)用啟動初始化:

  • 減少在Application所做的初始化操作,根據(jù)業(yè)務(wù)邏輯可以將統(tǒng)計事件、廣告等SDK的初始化的操作移動啟屏的Activity中。
  • 部分SDK可通過異步線程進(jìn)行初始化
  • 如果存在多進(jìn)程的情況,Application會多次實例化,只在主進(jìn)行中進(jìn)行初始化操作

2、避免ANR的出現(xiàn)

  • 不要在Service中做耗時操作,可使用IntentService(線程、自動銷毀)
  • 不要在BroadcastReceiver的onReceiver中執(zhí)行耗時操作,可創(chuàng)建IntentService完成

總結(jié)

以上是生活随笔為你收集整理的Android性能优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。