测量Drawable的大小(内存)

时间:2011-05-03 13:01:30

标签: android jpeg out-of-memory

我最初的问题是我正在下载一个1.3MB的jpeg文件并将其设置为图像。这导致内存不足异常。显然,现在服务器会在下载之前调整照片大小。但是我仍在接受OOM考试。测量我下载文件大小的最简单方法是什么?

编辑我还应该提一下,这在模拟器上运行正常,但在G1上运行时会出现问题

    public Drawable getImage() throws IOException, MalformedURLException {
        InputStream is = (InputStream) new java.net.URL(url).getContent();


        return Drawable.createFromStream(is, "name");


}

3 个答案:

答案 0 :(得分:3)

重要的是您正在下载/加载的图片的尺寸。内存使用量大致为宽*高* 2字节(如果图像以32位加载,则为* 4字节。)BitmapFactory提供了一种在不加载整个图像的情况下读取图像尺寸的方法。您可以使用它来查看图像在加载之前在内存中的大小。

答案 1 :(得分:0)

如果您通过流执行此操作,则每个Stream子级(例如,InputStream)都有一个read方法,该方法返回读取的字节数。只需计算这些字节,就可以得到图像的大小。这是一个小代码示例:

while ((count = is.read(data)) != -1) { out.write(data, 0 , count); }

祝你好运!

答案 2 :(得分:0)

可能正在发生OOM异常,因为您没有回收正在创建的Bitmap对象。渲染图像时(我假设在ImageView中)你可能想要做这样的事情:

  ImageView iv;

  // before you update the imageview with the image from the server
  if(iv.getDrawable() != null) ((BitmapDrawable)iv.getDrawable()).getBitmap().recycle();