Używam Ubuntu 16.04. A na Android Studio, gdy próbuję uruchomić moją aplikację w emulatorze, pojawia się następujący błąd:
KRYTYCZNY WYJĄTEK: główny proces: tutaj nazwa projektu, PID: 2528 java.lang.RuntimeException: Canvas: próba narysowania zbyt dużej (216090000 bajtów) mapy bitowej. na android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.java:260) na android.graphics.Canvas.drawBitmap (Canvas.java:1415) na android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.java:528) na android. widget.ImageView.onDraw (ImageView.java:1316) pod adresem android.view.View.draw (View.java:17185) pod adresem android.view.View.updateDisplayListIfDirty (View.java:16167) pod adresem android.view.View.draw (View.java:16951) na android.view.ViewGroup.drawChild (ViewGroup.java:3727) na android.view.ViewGroup.dispatchDraw (ViewGroup.java:
itp...
Musiałem jednak przejść przez kilka kółek, aby mój emulator działał, jednak potrzebowałem utworzyć łącze symboliczne, aby móc uruchomić emulator na AMD. Nie jestem pewien, czy to jest częścią problemu. I za moje życie nie mogę zrozumieć, dlaczego nadal to robi. W mojej grupie są inni, którzy dobrze emulują projekt na tym samym emulowanym telefonie i SDK.
BitmapOption.inSampleSize
?Odpowiedzi:
Przenieś swój obraz w (hi-res) drawable do drawable-xxhdpi . Ale podczas tworzenia aplikacji nie musisz używać dużego obrazu. Zwiększy to rozmiar pliku APK.
źródło
Rozwiązaniem jest przeniesienie obrazu z
drawable/
folderu dodrawable-xxhdpi/
folderu, o czym wspominali również inni.Ale ważne jest również, aby zrozumieć, dlaczego ta nieco dziwna sugestia w rzeczywistości pomaga:
Powodem jest to, że
drawable/
folder istnieje we wczesnych wersjach Androida i jest odpowiednikiemdrawable-mdpi
. Gdy obraz, który znajduje się tylko wdrawable/
folderze, jest używany naxxhdpi
urządzeniu, potencjalnie już duży obraz jest przeskalowywany 3-krotnie, co w niektórych przypadkach może spowodować eksplozję pamięci obrazu.źródło
drawable/
katalog, jeśli mam zasób w innychdrawable-x
katalogach?Miałem ten sam problem. Jeśli spróbujesz przesłać obraz, który jest zbyt duży na niektórych urządzeniach o niskiej rozdzielczości, aplikacja zwinie się. Możesz utworzyć kilka obrazów o różnych rozmiarach (hdpi, xxdpi i więcej) lub po prostu użyć zewnętrznej biblioteki do załadowania obrazów, które szybko i skutecznie rozwiązują problem. Użyłem biblioteki Glide (możesz użyć innej biblioteki, takiej jak Picasso).
panel_IMG_back = (ImageView) findViewById(R.id.panel_IMG_back); Glide .with(this) .load(MyViewUtils.getImage(R.drawable.wallpaper) .into(panel_IMG_back);
źródło
Okazuje się, że problemem był główny obraz, którego używaliśmy w tym czasie w naszej aplikacji. Rzeczywisty rozmiar obrazu był za duży, więc skompresowaliśmy go. Potem działało jak urok, bez utraty jakości, a aplikacja działała dobrze na emulatorze.
źródło
Miałem również ten problem, gdy próbowałem dodać ekran powitalny do aplikacji na Androida za pośrednictwem pliku launch_backgrgound.xml. problemem było rozwiązanie. była zbyt wysoka, więc ślad pamięci obrazów eksplodował i spowodował awarię aplikacji, stąd przyczyna tego błędu. więc po prostu zmień rozmiar obrazu za pomocą witryny o nazwie Nativescript Image Builder, więc mam ldpi, mdpi i całą resztę i działało dobrze.
źródło
Ponieważ ten błąd był taki, jak inni powiedzieli duży obraz (1800px X 900px), który był w katalogu do rysowania, zredagowałem obraz i zmniejszyłem rozmiar proporcjonalnie za pomocą Photoshopa i zadziałało ... !!
źródło
jeśli używasz Picassa, zmień na Glide w ten sposób.
Usuń Picasso
Picasso.get().load(Uri.parse("url")).into(imageView)
Zmień Glide
Glide.with(context).load("url").into(imageView)
Bardziej wydajne Glide niż Picasso rysuje do dużych bitmap
źródło
Właśnie utworzyłem katalog drawable-xhdpi (możesz go zmienić zgodnie z potrzebami) i skopiowałem wklejone wszystkie obrazy do tego katalogu.
źródło
W moim przypadku musiałem usunąć platformę Android i dodać ją ponownie. Coś utknęło i skopiowanie całego mojego kodu do innej aplikacji działało jak urok - stąd mój pomysł na wyczyszczenie kompilacji dla Androida poprzez usunięcie platformy.
cordova platform remove android cordova platform add android
Myślę, że to jakiś porządek, który musisz zrobić od czasu do czasu :-(
źródło
Może to być problem z Glide. Użyj tego, gdy próbujesz załadować wiele obrazów, a niektóre z nich są bardzo duże:
Glide.load("your image path") .transform( new MultiTransformation<>( new CenterCrop(), new RoundedCorners( holder.imgCompanyLogo.getResources() .getDimensionPixelSize(R.dimen._2sdp) ) ) ) .error(R.drawable.ic_nfs_default) .into(holder.imgCompanyLogo); }
źródło
To rozwiązanie zadziałało dla mnie.
Dodaj te wiersze do tagu aplikacji Manifest
android:largeHeap="true" android:hardwareAccelerated="false"
źródło
Jeśli nie chcesz, aby obraz był wstępnie przeskalowany, możesz przenieść go do
res/drawable-nodpi/
folderu.Więcej informacji: https://developer.android.com/training/multiscreen/screendensities#DensityConsiderations
źródło