我一直对这个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;
我没有使用任何库,并希望保持这种方式,但如果使用库是我将使用的唯一选项。希望有人可以提供帮助。
答案 0 :(得分:2)
如果位图附加到View(例如ImageView),位图将无法完全回收,如果执行imageView.setImageBitmap(bitmap)
,则需要在执行imageView.setImageBitmap(null)
之前将其清除并清除任何其他引用任何观点。
答案 1 :(得分:0)
完成上传图片后,释放" postImage
" -
postImage.setImageDrawable(null);
这将释放与postImage
答案 2 :(得分:0)
一般答案:
上传文件时,您需要打开一个流到您的服务器和 你的文件同时。以1 MB的块读取和写入块 例。这样你就不会出现内存不足的例外情况。