首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 自定義控件導致模擬器無限重啟:記憶體溢出排查

     編輯:程式設計綜合問答

現象

加入自定義 BaseTitleLayout 後,App 啟動瞬間模擬器重啟,日誌顯示 OutOfMemoryError,疑似歡迎頁載入大圖導致。

原因定位

  • 自定義控件本身極簡單,僅 inflate 布局,不會導致無限重啟。
  • 日誌指向 Bitmap 解碼超出 VM 預算,通常是歡迎頁 ImageView 直接載入高解析度圖片(如 3000x2000 px),瞬間佔用數十 MB 記憶體。

解決方案

  1. 壓縮圖片資源:將歡迎頁圖片縮放至螢幕解析度(如 1080x1920),檔案大小控制在 200KB 以內。
  2. 使用 inSampleSize 子採樣載入:
    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inSampleSize = 2; // 寬高各縮半,記憶體佔用減為 1/4
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.welcome, opts);
    imageView.setImageBitmap(bmp);
    
  3. 採用圖片載入庫:Glide、Picasso、Coil 自動處理縮放、快取、生命週期,一行程式碼解決:Glide.with(this).load(R.drawable.welcome).into(imageView);
  4. 檢查模擬器配置:分配足夠 RAM(建議 ≥ 2GB),啟用 GPU 加速。

驗證步驟

  • 註釋掉歡迎頁圖片載入程式碼,若不再重啟,確定為圖片問題。
  • 使用 adb shell dumpsys meminfo <package> 觀察記憶體佔用峰值。

解決大圖載入導致的 OOM,模擬器即可正常運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved