1. 程式人生 > >android 本地大圖片造成記憶體溢位的解決方案

android 本地大圖片造成記憶體溢位的解決方案

在使用中,小的圖片,可以通過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層的空間。