Android内存优化之Bitmap

在Android应用中由于系统本身的限制,系统分给每个APP进程内存大小都有限制,一般是16M,,为了节省内存,我们不得不竭尽所能,对于BitMap优化,我有以下建议:

1:通多BitMapFactory.options ,缩小尺寸,SDK中建议以2的指数值进行缩放;在Android加载图片到内存时,一张图片占用内存的大小算法是长*宽,也就是这张图片的像素点,所有的像素点都是存放在对应的数组中

2:在对图片本身操作时,应尽量不要使用SetImageBitMap,setImageResource,BitMapFactory.decodeResource 来设置一张大图,因为这些方法在完成Decode(解码)功能后,最终都是通多Java层的createBitMap()方法来完成的,这需要消耗更多的内存,应该通多BitMapFactory.decodeStream() 方法创建一个bitMap,然后再将其设置为ImageView的source。decodeStream 的最大优点是直接调用JNI>>nativeDecodeAsset()来完成的decode,从而节省加载时的内存,使用decodeStream()直接读取字节码,不会根据机器的各种分辨率自动适应,需要自行处理,红色部分是是调用JNI层获取一张BitMap;

public static Bitmap decodeStream(InputStream is, Rect outPadding, Options opts) {
        // we don't throw in this case, thus allowing the caller to only check
        // the cache, and not force the image to be decoded.
        if (is == null) {
            return null;
        }

        Bitmap bm = null;

        Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap");
        try {
            if (is instanceof AssetManager.AssetInputStream) {
                final int asset = ((AssetManager.AssetInputStream) is).getAssetInt();
                bm = nativeDecodeAsset(asset, outPadding, opts);
            } else {
                bm = decodeStreamInternal(is, outPadding, opts);
            }

3:图片回收,在用完之后记得bmp.recycle();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值