2016-03-21 18 views
1

私はこのアンドロイドエラーで狂ってしまい、このエラーに関する以前の投稿を閲覧しても、与えられた解決策はありませんでした。Android:ビットマップのメモリ不足エラー

私はもちろん、(NUMBER)バイトの割り当てで 'アンドロイドメモリ不足'として知られているすべての強力な殺人者について話しています。私は写真アップローダーを作成しようとしています.3番目の多分4番目の画像の後に私のアプリケーションがクラッシュします。しかし、私の問題ではないキャッチ例外を使用するクラッシュを停止することを知っている。私はコミュニティにこのバイト割り当てエラーを修正する解決策があるのか​​聞いてきましたか?

ここに、ビットマップに関連するコードのスニペットがあります。

 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; 

イム任意のライブラリを使用して、ライブラリを使用すると、私は1つを使用する唯一のオプションである場合、そのようしかし、それを維持したいと思いません。うまくいけば誰かが助けることができる。

+0

私はリサイクルがメモリからすぐに画像を削除するとは思わない。それはガベージコレクタに依存します。リサイクルはそれを強制しません。 – hasan83

答えて

2

imageView.setImageBitmap(bitmap)を実行した場合、BitmapはViewにアタッチされていると完全にはリサイクルされません。imageView.setImageBitmap(null)を実行してから、他の参照をクリアする必要があります。

+0

これはトリックでした!答えてくれてありがとう – DetectiveClarke

0

あなたがイメージが「postImage」によって占有メモリ解放しuplloading終わったら -

postImage.setImageDrawable(null); 

をこのpostImage

0

一般的な答えに関連付けられたビットマップによって占有任意のメモリ解放します:

ファイルをアップロードするときは、サーバーへのストリームを開く必要があります。同時にファイルをにコピーしてください。 の例では1 MBのチャンクでチャンクを読み書きします。この方法では、メモリ不足例外が発生しません。

関連する問題