このエラーに関してstackoverflowで多くの質問がありましたが、私のシナリオでは適切な解決策を説明していません。Androidエラー:java.lang.OutOfMemoryError:ビットマップサイズがVMの予算を超えています
私のアンドロイドアプリケーションでは、ユーザーがボタンをクリックしてギャラリーを開き、画像を選択できるようにする必要があります。そして、その特定の選択されたイメージをレイアウト(UI)のImageViewにロードする必要があります。
これは非常にうまくいきます。以下は、これを達成するために使用しているコードです。 >
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), REQUEST_UPLOAD_IMG);
そしてonActivityResult - - アップロードボタンクリックで
>
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
//super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK)
{
if(requestCode==REQUEST_UPLOAD_IMG)
{
Uri selectedImageURI = data.getData();
uploadImgVW.setImageURI(selectedImageURI);
}
else
{
Toast.makeText(MainActivity.this, "You can only select an Image.", Toast.LENGTH_LONG).show();
}
}
}
しかし、ユーザーがより高いサイズ(サイズのよう2メガバイト)で画像を選択した場合、アプリケーション次のエラーで終了します。しかし、通常の(KBレベルの)画像ではかなりうまくいき、この問題のために何ができるのだろうか(このエラー状況を処理するために)。おかげで...
エラー - >
06-20 16:43:58.445: E/AndroidRuntime(2075): FATAL EXCEPTION: main
06-20 16:43:58.445: E/AndroidRuntime(2075): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
ビットマップがロードされるたびにリサイクルする必要があります if(b itmap!= null){ bitmap.recycle(); –
初めてアプリがクラッシュするそれが問題です。次のコードも追加しました。ボタンクリックでガベージコレクタを実行するだけです。 [System.gc(); Runtime.getRuntime()。gc(); ] – JibW
@JibWガベージコレクションは問題ではありません、gunnarのように画像のサイズを調整する必要があります – tyczj