Natknąłem się na wiele pytań w stackoverflow dotyczących tego błędu, ale nie znalazłem wyjaśnienia odpowiedniego rozwiązania dla mojego scenariusza.Błąd systemu Android: java.lang.OutOfMemoryError: rozmiar bitmapy przekracza budżet VM
W mojej aplikacji Android muszę pozwolić użytkownikowi kliknąć przycisk, aby otworzyć Galerię i wybrać obraz. A następnie musi załadować ten konkretny wybrany obraz do ImageView w moim układzie (UI).
Wykonanie tego jest całkiem w porządku. Poniżej znajduje się kod, którego używam, aby to osiągnąć.
się Udostępnij kliknięcia przycisku ->
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), REQUEST_UPLOAD_IMG);
A potem 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();
}
}
}
Ale jeśli użytkownik wybrać obraz o wyższej wielkości (jak 2MB od rozmiaru), aplikacja zakończ z następującym błędem. Ale na normalnych obrazach (na poziomie KB) jest całkiem dobrze i zastanawiam się, co mogę zrobić dla tego problemu (aby poradzić sobie z tą sytuacją błędu). Dzięki ...
Error ->
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
Powtórz tę czynność z powodzeniem po każdym załadowaniu bitmapy if (b itmap! = null) { bitmap.recycle(); –
Aplikacja ulega awarii nawet po raz pierwszy. To jest problem. Dodałem również następujące kody, aby uruchomić moduł do zbierania śmieci w kliknięciu przycisku. [System.gc(); Runtime.getRuntime(). Gc(); ] – JibW
@JibW garbage collection nie jest problemem, musisz dostosować rozmiar obrazu jak gunnar mówi – tyczj