Android圖片記憶體溢位的解決方案
1.圖片記憶體溢位
預設情況下,每個android程式的dailvik虛擬機器的最大堆空間大小為16M
當載入的圖片太多或圖片過大時經常出現OOM問題
android 中用bitmap 時很容易記憶體溢位,報如下錯誤:Java.lang.OutOfMemoryError
2.解決辦法
public Bitmap matrixBitmapSize(Bitmap bitmap, int screenWidth, int screenHight) { //獲取當前bitmap的寬高 int w = bitmap.getWidth(); int h = bitmap.getHeight(); Matrix matrix = new Matrix(); float scale = (float) screenWidth / w; float scale2 = (float) screenHight / h; // 取比例小的值 可以把圖片完全縮放在螢幕內 scale = scale < scale2 ? scale : scale2; // 都按照寬度scale 保證圖片不變形.根據寬度來確定高度 matrix.postScale(scale, scale); // w,h是原圖的屬性. return Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); } public Bitmap optionsBitmapSize(String imagePath, int screenWidth, int screenHight) { // 設定解析圖片的配置資訊 BitmapFactory.Options options = new Options(); // 設定為true 不再解析圖片 只是獲取圖片的頭部資訊及寬高 options.inJustDecodeBounds = true; // 返回為null BitmapFactory.decodeFile(imagePath, options); // 獲取圖片的寬高 int imageWidth = options.outWidth; int imageHeight = options.outHeight; // 計算縮放比例 int scaleWidth = imageWidth / screenWidth; int scaleHeight = imageHeight / screenHight; // 定義預設縮放比例為1 int scale = 1; // 按照縮放比例大的 去縮放 if (scaleWidth > scaleHeight & scaleHeight >= 1) { scale = scaleWidth; } else if (scaleHeight > scaleWidth & scaleWidth >= 1) { scale = scaleHeight; } // 設定為true開始解析圖片 options.inJustDecodeBounds = false; // 設定圖片的取樣率 options.inSampleSize = scale; // 得到按照scale縮放後的圖片 Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options); return bitmap; }
相關文章
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- Windows Tomcat 記憶體溢位解決方法WindowsTomcat記憶體溢位
- Java程式碼執行記憶體溢位詳解及解決方案Java記憶體溢位
- tomcat記憶體溢位:PermGen space解決方法Tomcat記憶體溢位
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- 記憶體溢位記憶體溢位
- 記錄佇列序列化模型導致的記憶體溢位的解決方案佇列模型記憶體溢位
- tomcat伺服器記憶體溢位解決方法Tomcat伺服器記憶體溢位
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- Java記憶體溢位Java記憶體溢位
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 關於Allowed memory size of (PHP記憶體溢位)錯誤的可能原因及解決方案PHP記憶體溢位
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- Android-Fragment 切換造成記憶體溢位,導致記憶體增長AndroidFragment記憶體溢位
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 記一次網頁記憶體溢位分析及解決實踐網頁記憶體溢位
- Android 圖片高斯模糊解決方案Android
- JVM 發生記憶體溢位的 8 種原因、及解決辦法JVM記憶體溢位
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- Jmeter記憶體溢位:java.lang.OutOfMemoryError: Java heap space解決思路JMeter記憶體溢位JavaError
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- Java EasyExcel 匯出報記憶體溢位如何解決JavaExcel記憶體溢位
- 記一次記憶體溢位問題的排查、分析過程及解決思路記憶體溢位
- mybatis-plus getOne 記憶體溢位MyBatis記憶體溢位
- return new物件造成溢位記憶體物件記憶體
- Android記憶體溢位、記憶體洩漏常見案例分析及最佳實踐總結Android記憶體溢位
- java向excel 寫入海量資料記憶體溢位問題 解決JavaExcel記憶體溢位
- Executors使用不當引起的記憶體溢位記憶體溢位
- 簡單的記憶體“洩露”和“溢位”記憶體
- vertica記憶體不足的解決方案記憶體
- Windbg下使用dump分析記憶體溢位記憶體溢位
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- 記憶體和棧溢位問題定位記憶體
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- 解決SqlServer執行指令碼,檔案過大,記憶體溢位問題SQLServer指令碼記憶體溢位
- Android記憶體優化之圖片優化Android記憶體優化