我正在制作一个简单的Android聊天应用程序,可以发送图像和文本。我暂时在localhost中使用MySQL数据库,在其中存储图像的base64字符串(我需要这样做,因为我也必须在网络版本的聊天中显示图像)。到目前为止,网络版本可以正常运行,但是我的Android应用每发送2-3张图片就会运行到OOM中。
这是我的代码,用于将base64转换为位图并使用Glide显示,将其放入RecyclerView适配器中以显示聊天中发送的图像:
byte[] decodedString = Base64.decode(c.getMessage(), Base64.DEFAULT);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inSampleSize=16;
decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length,options);
Glide.with(viewHolder.mymessageImage.getContext())
.asBitmap()
.load(decodedString)
.thumbnail(0.5f)
.into(viewHolder.mymessageImage);
decodedString=null;
这些是我得到的错误:
E/dalvikvm-heap: Out of memory on a 4205580-byte allocation.
E/GlideExecutor: Request threw uncaught throwable java.lang.OutOfMemoryError
我之所以使用Glide,是因为以前是
viewHolder.mymessageImage.setImageBitmap(decodedByte);
以显示图像,它也导致OOM。我直接设置ImageBitmap时的错误是
处的OOMbyte[] decodedString = Base64.decode(c.getMessage(), Base64.DEFAULT);
行。经过一番谷歌搜索后,很多人说滑翔将是解决方案。 Glide确实有助于提高加载速度,但在发送2-3张图片并上下滚动RecyclerView数次后,它仍因OOM而崩溃。
我已尝试将这个问题修复了一周,但都无济于事。我正在考虑这个问题。请帮助我找到一种解决方案,以使我的应用在没有OOM的情况下平稳运行。