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

Android Activity 傳值崩潰排查:OutOfMemoryError 疑似大圖片導致

     編輯:程式設計綜合問答

崩潰現象

兩個 Activity 之間通過 Intent 傳遞賬號、密碼、圖片資源 ID,運行報錯「test11已停止運行」,Logcat 顯示 java.lang.OutOfMemoryError。

核心定位

圖片資源過大導致內存溢出:
ImageButton 直接引用 @drawable/a1 等高分辨率圖片,解碼進內存佔用超過 Dalvik/ART 堆限制(通常 16-256MB)。

解決方案

  1. 壓縮圖片資源:將 drawable 圖片壓縮至適當尺寸(如 200x200px),使用 BitmapFactory.Options.inSampleSize 采樣加載
  2. 使用圖片加載庫:Glide/Picasso 自動處理縮放、緩存、生命周期
    Glide.with(this).load(R.drawable.a1).into(imageButton);
  3. 避免傳遞 Bitmap 對象:Intent 僅傳資源 ID (int),目標 Activity 重新加載
  4. 配置 largeHeap(治標):android:largeHeap="true" 在 Manifest 標籤

代碼細節優化

  • pictureId 定義為 int 而非 Drawable
  • 第二個 Activity 中 textview1 重複賦值導致 textview2/3 為 null,修正:
    textview1 = findViewById(R.id.t20);
    textview2 = findViewById(R.id.t21);
    textview3 = findViewById(R.id.t22);
  • 檢查 intent.getIntExtra("圖片id", 0) 默認值防崩潰

Android 內存管理鐵律:大圖必須采樣加載,Intent 只傳標識符不傳對象,引入成熟圖片庫是專業標配。

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