日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android加载大图片不OutOfMemoryError

發布時間:2025/3/11 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android加载大图片不OutOfMemoryError 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android加載圖片時,對于分辨率小,配置低的機子,很容易發生OutOfMemoryError。手機的內存比圖片的大很多,怎么會這樣?

在設置Android虛擬機的內存時:

RAM:模擬器的內存空間

VM Heapdalvik虛擬機最大占用內存,也就是單個進程的最大占用內存。

VM Heap高配的手機,可能有32M,64M,128M,而低配的手機,一般是16M,分辨率越大的手機,一般分配的也比較多。

Android系統對dalvik的vm heapsize作了硬性限制,當java進程申請的java空間超過閾值時,就會拋出OOM異常。也就是說RAM充足也會發生OOM的異常。

--------------------

VM Heap大小16mb,當應用加載一張大圖時,加載圖片所需要的內存空間不是按照圖片大小算的,而是按照圖片的像素點來算的。

圖片像素點計算:

1張叫juhua.jsp的圖片,大小1.27MB,分辨率:3840*2160,24位。

* Android保存圖片像素信息,是用ARGB保存 ?* A:0-255,需要一個長度為8的二進制數字,占用1個字節
?* R:0-255,需要一個長度為8的二進制數字,占用1個字節 ?* G:0-255,需要一個長度為8的二進制數字,占用1個字節 ?* B:0-255,需要一個長度為8的二進制數字,占用1個字節
3840*2160*4=33177600字節/1024/1024=31.640MB 超過了VM Heap的16MB,報內存溢出 10-27 06:16:27.645: I/dalvikvm-heap(1894): Forcing collection of SoftReferences for 33177612-byte allocation
10-27 06:16:27.645: E/dalvikvm-heap(1894): Out of memory on a 33177612-byte allocation.
10-27 06:16:27.655: E/AndroidRuntime(1894): Caused by: java.lang.OutOfMemoryError

************************************ 解決方法: 按比例縮小圖片,再加載。 現有手機屏幕分辨率 320*480 寬比:3840/320=12 高比:2160/480=4
選擇比例大的數字12
縮放后再設置,就不會溢出了。 31.640MB/12=2.64mb

代碼例子:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="點擊加載大圖片(OOO)"android:onClick="loadPic"/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/btn1"android:text="點擊縮放加載大圖片"android:onClick="scaleLoadPic"/><ImageView android:id="@+id/iv_pic"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/btn2"/></RelativeLayout>
package com.example.loadbigpic;import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; import android.os.Bundle; import android.view.Display; import android.view.View; import android.widget.ImageView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void loadPic(View v){/** BitmapFactory.decodeResource(?,?)* 這個帶兩個參數的方法:第一個參數是包含你要加載的位圖資源文件的對象(一般寫成 getResources()就ok了);* 第二個時你需要加載的位圖資源的Id。BitmapFactory.decodeResource(?,?,?)帶三個參數的方法:前兩個和上面的方法一樣。第三個參數應該是對你要加載的位圖是否需要完整顯示,如果你只需要部分,可以在這里定制。*/Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.juhua);ImageView iv_pic=(ImageView) findViewById(R.id.iv_pic);iv_pic.setImageBitmap(bm);}public void scaleLoadPic(View v){Options opts=new Options();//默認為false,設為true,則decoder返回null,//即BitmapFactory.decodeResource(getResources(),R.drawable.juhua,opts);返回null//但會返回圖片的參數的信息到Options對象里//不解析圖片到內存里opts.inJustDecodeBounds=true;BitmapFactory.decodeResource(getResources(),R.drawable.juhua,opts);//獲取圖片的寬,高int imageWidth=opts.outWidth;int imageHeigth=opts.outHeight;//獲取屏幕的高寬Display dp=getWindowManager().getDefaultDisplay();//在高版本里有新的方法獲取,但圖片加載是常用功能,要兼容低版本,所以過時了也用int screenWidth=dp.getWidth();int screenHeight=dp.getHeight();//計算縮放比例int scale=1;int scaleWidth=imageWidth/screenWidth;int scaleHeight=imageHeigth/screenHeight;//取縮放比例,取那個大的值if(scaleWidth>=scaleHeight && scaleWidth>=1){scale=scaleWidth;}else if(scaleWidth<scaleHeight && scaleHeight>=1){scale=scaleHeight;}//設置縮放比例opts.inSampleSize=scale;opts.inJustDecodeBounds=false;Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.juhua,opts);ImageView iv_pic=(ImageView) findViewById(R.id.iv_pic);iv_pic.setImageBitmap(bm);}}






總結

以上是生活随笔為你收集整理的Android加载大图片不OutOfMemoryError的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲日本va中文字幕 | 国产一毛片 | 美女被啪啪 | 国产视频一二三 | 每日在线观看av | 日日夜夜婷婷 | 欧美xxxx黑人xyx性爽 | 韩国av毛片 | 日韩国产在线一区 | 亚洲黄色网页 | 亚洲综合色成人 | 色图社区 | 在线观看免费小视频 | 西西444www大胆无视频 | av激情在线观看 | 污视频网站免费 | 各处沟厕大尺度偷拍女厕嘘嘘 | 国产乱淫av麻豆国产 | 日本一级淫片免费放 | 人妻一区二区三区视频 | 亚洲欧洲无码一区二区三区 | 怡春院欧美 | 韩国一区二区三区在线观看 | 欧美大片在线看免费观看 | 国产婷婷一区二区三区久久 | 综合久久综合久久 | 综合色婷婷一区二区亚洲欧美国产 | 少妇野外性xx老女人野外性xx | 老牛影视少妇在线观看 | 天天干天天天 | 日本人jizz| 大又大粗又爽又黄少妇毛片 | 国内一区二区视频 | 亚洲精品国产视频 | 久久久国产网站 | 天堂网av在线播放 | 亚洲国产精品免费视频 | 欧美性猛交ⅹxxx乱大交3 | 在线免费精品 | 最近中文字幕免费视频 | 在线看www| 亚洲黄业 | 草逼导航| www.av天天| 91资源在线观看 | 天天狠天天插 | 国产黄色片免费 | av在线播放地址 | 成人在线毛片 | 国产高潮自拍 | 友田真希一区二区 | 中文字幕免费高清网站 | 日本香蕉视频 | 日本色婷婷 | 最近的中文字幕在线看视频 | 久久久无码一区二区三区 | 精品免费在线观看 | 亚洲蜜桃精久久久久久久久久久久 | 日本三级黄色大片 | 91禁在线看 | 日本天堂网在线观看 | 人妖天堂狠狠ts人妖天堂狠狠 | cao国产| 久久综合久久久 | 捆绑裸体绳奴bdsm亚洲 | 国产在线看 | 精品一区二区三区四区 | 日韩免费毛片 | 亚洲av无码精品色午夜 | 日韩在线一区二区三区 | julia一区 | 黄色网久久 | 成人免费视频国产免费麻豆 | 国产精品一区二区人妻喷水 | 公侵犯人妻一区二区三区 | 久久精品久久久久久 | 日韩一区二区视频 | 日韩福利视频 | 裸体av淫导航 | 国产交换配乱淫视频免费 | 午夜激情成人 | 夜夜导航 | 激情自拍偷拍 | 午夜私人福利 | 日本视频不卡 | 欧美国产激情 | 欧美激情区 | 国产在线欧美在线 | 裸体喂奶一级裸片 | 夜夜夜夜骑 | 人善交videos欧美3d动漫 | 欧美日韩一区二区综合 | 日韩欧美亚洲一区 | 国产一区二区三区在线视频观看 | 日本黄色视 | 亚洲精品在线电影 | 亚洲一区二区视频在线播放 | 99久免费精品视频在线观78 | 乱淫的女高中暑假调教h |