Android:位图导致内存不足错误

时间:2016-03-21 20:37:05

标签: android bitmap

我一直对这个Android错误感到疯狂,并且在浏览之前关于此错误的帖子时,所提供的解决方案都没有帮助我。

我当然是在谈论所有强大的杀手,即(NUMBER)字节分配中的' android内存不足。'我正在尝试创建一个照片上传器,在第三个可能是第四个图像之后我的应用程序崩溃了。我知道要停止崩溃使用catch异常,但这不是我的问题。我在这里问社区有没有解决这个字节分配错误的方法?

这是我的代码片段,涉及位图。

        String post = editTextPost.getText().toString().trim();
        // get the photo :
        Bitmap image = ((BitmapDrawable)postImage.getDrawable()).getBitmap();

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        // compress the image to jpg format :
        image.compress(Bitmap.CompressFormat.JPEG, 45, byteArrayOutputStream);
        byte[] imageBytes = byteArrayOutputStream.toByteArray();
        String encodeImage = Base64.encodeToString(imageBytes,Base64.DEFAULT);
        // Recycle bitmap :
        image.recycle();
        image=null;

        // send data :
        sendPost p = new sendPost(this);
        p.execute(post, encodeImage);
        imageBytes=null;

我没有使用任何库,并希望保持这种方式,但如果使用库是我将使用的唯一选项。希望有人可以提供帮助。

3 个答案:

答案 0 :(得分:2)

如果位图附加到View(例如ImageView),位图将无法完全回收,如果执行imageView.setImageBitmap(bitmap),则需要在执行imageView.setImageBitmap(null)之前将其清除并清除任何其他引用任何观点。

答案 1 :(得分:0)

完成上传图片后,释放" postImage" -

postImage.setImageDrawable(null);

这将释放与postImage

关联的位图占用的所有内存

答案 2 :(得分:0)

一般答案:

  

上传文件时,您需要打开一个流到您的服务器和   你的文件同时。以1 MB的块读取和写入块   例。这样你就不会出现内存不足的例外情况。