android 本地大圖片造成記憶體溢位的解決方案
阿新 • • 發佈:2018-11-16
在使用中,小的圖片,可以通過drawable直接引用setImageResource或者setBackgroundResource, 但涉及到大圖時,儘量通過decodeStream來建立bitmap,然後再給對應的view使用。
public static 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);
}
原因:setImageResource方法,最終都是通過java層的createBitmap來完成的,需要消耗更多記憶體。
而decodeStream最大的祕密在於其直接呼叫JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap,從而節省了java層的空間。