繁体   English   中英

Android中的位图内存管理

[英]Bitmap memory management in Android

你好我测试代码,以避免在加载大量位图时内存崩溃。 我有一个小问题,关于以下代码

    Bitmap bmp;
    long sizepreload, sizepostload,bmppixels;
    sizepreload= Debug.getNativeHeapAllocatedSize();

    bmp=getImageBitmapFromUrl("http://www.google.com/intl/en_com/images/srpr/logo2w.png");
    sizepostload=Debug.getNativeHeapAllocatedSize();
    bmppixels=bmp.getHeight()*bmp.getWidth();
    Log.d("bmp test","pre="+sizepreload+"\n" +
            "post="+sizepostload+"\n" +
            "bmppixels="+bmppixels+"\n"+
            "ratio="+(sizepostload-sizepreload)/bmppixels
            );

该片段的返回是:

pre=4260464
post=4333112
bmppixels=26125
ratio=2

因此位图每像素占用2个字节。 对于所有位图,每像素16位是恒定的,或者它是可变的(取决于屏幕密度或图像质量)。 如果它的变量如何从Bitmap类中获得该比率?

提前致谢

这是从网址下载的代码:

public static Bitmap getImageBitmapFromUrl(String url){
    URL aURL;
    Bitmap result = null;
    try {
        aURL = new URL(url);
        URLConnection conn = aURL.openConnection();
        conn.connect();
        InputStream is = conn.getInputStream();
        result= BitmapFactory.decodeStream(is);
        is.close();

    } catch (Exception e) {
        result=null;
        e.printStackTrace();
    }
    return result;
}

位图每个像素最多可包含4个字节,这取决于位图的格式。 屏幕密度不可变。 但是,在绘制位图时,可能需要调整屏幕密度的大小,这会暂时影响您的堆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM