java - Android 中的位图内存管理

标签 java android image bitmap

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

    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
            );

该 fragment 的返回是:

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

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

提前致谢

这是从 url 下载的代码:

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 个字节,这取决于位图的格式。屏幕密度不可变。但是,绘制位图时,可能需要根据屏幕密度调整大小,这会暂时影响您的堆。

关于java - Android 中的位图内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6893258/

相关文章:

image - 如何在不知道扩展名的情况下在 <img> 标签中呈现 base-64 字符串

java - 正则表达式匹配特定单词并忽略特定文本

java - 为什么Spring Boot项目中的某些依赖不需要指定版本?

java - 如何处理ListView中的滚动? ListView 自动加载

Android AlarmManager 推送通知

css - 有没有办法将鼠标悬停在一个元素上并影响另一个元素?

python - 如何在pygame中使图像沿对角线 move ?

java - 处理 JVM 崩溃

android - 如何以编程方式检测 SONY - Stamina 设备能量配置文件已打开

android - AsyncTask 返回 null