2012-08-09 126 views
0

我正在开发与Facebook和Gatlk连接的聊天应用程序,使用ASMACK API获取联系人和VCard并在ListView中显示它们。Android OutOfMemory将图像字节数组转换为可绘制

从位于BYTE ARRAY的VCard获取联系人图像。我需要将此字节数组转换为图像(位图或可绘制),但在从图像字节数组创建Drawable时发生OutOfMemory异常,并且在滚动ListView时发生。

下面是代码片段,也尝试将其转换为位图,但与Bitmap outofmemory异常来更频繁。尝试使用bitmap.recyle()方法作为解决方案在论坛上提供此类问题。但使用回收()大部分地方得到例外,如“使用回收图像”。

这里如果日志:

java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
E/dalvikvm-heap(26048): 10000-byte external allocation too large for this process. 
E/GraphicsJNI(26048): VM won't let us allocate 10000 bytes 

请让我知道的最好的办法,以字节组转换成位图或绘制对象。 代码段是在这里:

public static Drawable createDrawableImageFromByteArray(Context context, byte[] imageByteArray){ 
    Drawable drawable = null; 
    try{ 
     if(imageByteArray != null){                         
      BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); 
      bmpFactoryOptions.inJustDecodeBounds = true;                
      int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)55); 
      int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)55); 

      if (heightRatio > 1 || widthRatio > 1){ 
       if (heightRatio > widthRatio){ 
        bmpFactoryOptions.inSampleSize = heightRatio; 
       } else { 
        bmpFactoryOptions.inSampleSize = widthRatio; 
       } 
      }            
      bmpFactoryOptions.inJustDecodeBounds = false; 
      bmpFactoryOptions.inPurgeable = true; 
      bmpFactoryOptions.inInputShareable = true; 
      drawable = Drawable.createFromResourceStream(context.getResources(), new TypedValue(), new ByteArrayInputStream(imageByteArray), "testimg", bmpFactoryOptions); 
     } 
    }catch(OutOfMemoryError e){ 
     Utils.debugLog("****** createBitmaException :: " + e); 
    }catch(Exception e){ 
     Utils.debugLog("****** createBitmaException :: " + e); 
    } 
    return drawable;        
} 

谢谢

+0

10K字节是不是非常大。可能您的应用程序在其他地方使用了大量内存,这就是为什么它没有足够的10k阵列工作的原因? – ab11 2012-08-09 14:38:48

+0

成功登录后,您应该将用户的头像设置为'SDCard'或者存储在数据库中,例如'Contacts app',并使用'AsyncTask'在列表视图中加载。我做到了,我的应用程序非常好 – 2012-08-09 15:01:39

+0

头像字节数组我在DB中存储。现在我已经在字节数组中应用了压缩,但是图像似乎被扭曲了,有时候还会出现OutOfMemory。 – Aparna 2012-08-10 15:01:03

回答

相关问题