안 드 로 이 드 이미지 메모리 최적화
。 setImageBitmap、setImageResource、BitmapFactory.decodeResource , decode , java createBitmap , 。 , BitmapFactory.decodeStream , bitmap, ImageView source,decodeStream JNI>>nativeDecodeAsset() decode, java createBitmap, java 。 Config , , 。 ,decodeStream , , decodeStream , hdpi mdpi,ldpi , ( ), 。
InputStream is = this.getResources().openRawResource(R.drawable.pic1);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 10; //width,hight
Bitmap btp =BitmapFactory.decodeStream(is,null,options);
if(!bmp.isRecycle() ){
bmp.recycle() //
system.gc() //
}
/**
*
* @param context
* @param resId
* @return
*/
publicstatic Bitmap readBitMap(Context context, int resId){
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
//
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is,null,opt);
}
option , ,SDK 2 , 。
Dalvik 。 Android , Dalvik Java VM , GC , dalvik.system.VMRuntime setTargetHeapUtilization 。 :
private final static float TARGET_HEAP_UTILIZATION = 0.75f;
。
。
private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
// heap 6MB
1、 :
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inSampleSize = 2;
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);
1.png , 、 1/2。 , 。 ,inSampleSize , 。 , 。 moto , , 。
2、 ARBG_4444 :
Android , :
ALPHA_8: 1byte
ARGB_4444: 2byte
ARGB_8888: 4byte
RGB_565: 2byte
Android ARGB_8888, , 。 , 。
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inPreferredConfig = Bitmap.Config.ARGB_4444;
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);
1.png ARGB_4444 。 , , ARGB_8888 。 , 。 , 。
3、 recycle() :
。 , 。 , Java 。 Java heap , OutOfMemoryError 。 , , OutOfMemoryError 。 recycle() “ ” , 。 , 。 setImageBitmap(Bitmap img) , , 。
4、 Matrix :
Matrix , , 。 ARGB_8888 , ARGB_4444 , 。 。
Matrix matrix = new Matrix();
float newWidth = 200;//
float newHeight = 300;//
matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight());
Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//
img2 = img1.copy(Bitmap.Config.ARGB_4444, false);// ARGB_4444
img = null;
img1 = null;
img1。 img1, 。
。 , 。 。 , 。 ListView , convertView 。 AsyncTask , ImageView null。 AsyncTask , , GC 。 Android ,recycle , Java 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.