Android性能优化
生活随笔
收集整理的這篇文章主要介紹了
Android性能优化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android性能優化
一、布局優化:
1、優化方式:
- 減少不必要嵌套,盡可能使用LinearLayout、ConstraintLayout等控件
- 減少顏色覆蓋,子控件背景足夠,不要在其父控件加顏色
- 使用include、merge、ViewStub
- include:布局復用
- merge:去除多余層級
- ViewStub:按需加載,當調用setVisibility或者inflate方法時才將布局加載到內存中
2、檢查方式:
一般打開開發者選項中,調戲GPU過渡繪制的按鈕,通過查看布局顏色深度來檢查過渡繪制的情況
二、繪制優化:
每幀繪制時間不超過16ms
1、優化方式:
- 減少在onDraw方法做耗時操作(循環等)
- 大量創建局部對象,因為onDraw會頻繁調用,導致產生大量臨時對象,引起過多占用內存和頻繁GC
三、內存優化:
- 避免內存泄漏的出現
- 線程優化:使用線程池
- 壓縮Bitmap
- 不要通過Intent傳遞大數據(1MB)
- 頁面退出時注意清理動畫、回收圖片資源等 1、內存泄漏
無用對象的內存得不到及時釋放。因為長生命周期的對象持有短生命周期的引用,導致短生命周期的對象無法被回收。
2、常見內存泄漏:
- 集合對象泄漏
- 靜態變量、單例持有對象
- 非靜態內部類、匿名內部類持有外部類引用
- 資源未關閉
3、舉例說明:
(1) 靜態集合:
public static List<Object> sObjects = new ArrayList<>();public void newList(){for (int i = 0; i < 100; i++) {sObjects.add(new Object());} } 復制代碼靜態集合只有多個對象,導致沒法被回收
解決方式:使用完畢后將集合清理
(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;} } 復制代碼單例生命周期為全局的,如果傳入的Context為Activity,導致Activity無法回收。
解決方式:使用ApplicationContext
(3)、靜態、匿名內部類:
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);}} } 復制代碼常用的創建一個Handler子類,為非靜態內部類,會持有外部類(Activity)的引用,導致Activity無法被回收。
解決方式:將MyHandler改為靜態內部類,自動不會持有外部類的應用。
可能的問題:如果需要在Handler持有Activity(例如更新UI)
處理方式:使用弱引用(GC的時候無論是否被持有都會被回收),根據實際應用場景使用。
(4)資源未關閉:
- 網絡、文件流、數據庫Cursor等
- 廣播取消注冊,EventBus取消注冊等
4、泄漏檢查方式:
可集成LeakCanary檢測、使用Memory Monitor或者使用Android studio中的Android Profiler檢測。
四、響應速度優化:
1、應用啟動初始化:
- 減少在Application所做的初始化操作,根據業務邏輯可以將統計事件、廣告等SDK的初始化的操作移動啟屏的Activity中。
- 部分SDK可通過異步線程進行初始化
- 如果存在多進程的情況,Application會多次實例化,只在主進行中進行初始化操作
2、避免ANR的出現
- 不要在Service中做耗時操作,可使用IntentService(線程、自動銷毀)
- 不要在BroadcastReceiver的onReceiver中執行耗時操作,可創建IntentService完成
總結
以上是生活随笔為你收集整理的Android性能优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ajax方式下载文件
- 下一篇: 海尔智慧家庭食联网:为每1个家庭配备专属