Ich verwende Ubuntu 16.04. Und unter Android Studio wird beim Versuch, meine Anwendung im Emulator auszuführen, die folgende Fehlermeldung angezeigt:
FATAL EXCEPTION: Hauptprozess: Projektname hier, PID: 2528 java.lang.RuntimeException: Canvas: Es wird versucht, eine zu große Bitmap (216090000 Byte) zu zeichnen. at android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.java:260) at android.graphics.Canvas.drawBitmap (Canvas.java:1415) at android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.j. widget.ImageView.onDraw (ImageView.java:1316) unter android.view.View.draw (View.java:17185) unter android.view.View.updateDisplayListIfDirty (View.java:16167) unter android.view.View.draw (View.java:16951) unter android.view.ViewGroup.drawChild (ViewGroup.java:3727) unter android.view.ViewGroup.dispatchDraw (ViewGroup.java:
usw...
Ich musste einige Rahmen durchlaufen, um meinen Emulator zum Laufen zu bringen, musste jedoch einen Sym-Link erstellen, damit ich den Emulator auf AMD ausführen kann. Ich bin mir nicht sicher, ob dies Teil des Problems ist. Und für mein Leben kann ich mir nicht vorstellen, warum es das weiterhin tut. In meiner Gruppe gibt es andere, die das Projekt auf demselben emulierten Telefon und SDK problemlos emulieren.
BitmapOption.inSampleSize
?Antworten:
Verschieben Sie Ihr Bild im ( hochauflösenden ) Zeichen nach Zeichen-xxhdpi . Bei der App-Entwicklung müssen Sie jedoch kein großes Bild verwenden. Dadurch wird Ihre APK-Dateigröße erhöht.
quelle
Die Lösung besteht darin, das Bild von
drawable/
Ordner zudrawable-xxhdpi/
Ordner zu verschieben, wie auch andere erwähnt haben.Es ist aber wichtig zu verstehen, warum dieser etwas seltsame Vorschlag tatsächlich hilft:
Der Grund ist, dass der
drawable/
Ordner aus früheren Versionen von Android existiert und äquivalent zu istdrawable-mdpi
. Wenn ein Bild, das sich nur in einemdrawable/
Ordner befindet, auf demxxhdpi
Gerät verwendet wird, wird das möglicherweise bereits große Bild um den Faktor 3 hochskaliert, was in einigen Fällen dazu führen kann, dass der Speicherbedarf des Bildes explodiert.quelle
drawable/
Verzeichnis entfernen kann, wenn ich das Asset in anderendrawable-x
Verzeichnissen habe?Ich hatte das gleiche Problem. Wenn Sie versuchen, ein Bild hochzuladen, das auf einigen Geräten mit niedriger Auflösung zu groß ist, wird die App reduziert. Sie können mehrere Bilder unterschiedlicher Größe (hdpi, xxdpi und mehr) erstellen oder einfach eine externe Bibliothek verwenden, um Bilder zu laden, die das Problem schnell und effizient lösen. Ich habe die Glide-Bibliothek verwendet (Sie können eine andere Bibliothek wie Picasso verwenden).
panel_IMG_back = (ImageView) findViewById(R.id.panel_IMG_back); Glide .with(this) .load(MyViewUtils.getImage(R.drawable.wallpaper) .into(panel_IMG_back);
quelle
Es stellte sich heraus, dass das Problem das Hauptbild war, das wir zu dieser Zeit in unserer App verwendet haben. Die tatsächliche Größe des Bildes war zu groß, daher haben wir es komprimiert. Dann funktionierte es wie ein Zauber, kein Qualitätsverlust und die App lief gut auf dem Emulator.
quelle
Ich hatte auch dieses Problem, als ich versuchte, der Android-App über die Datei launch_backgrgound.xml einen Begrüßungsbildschirm hinzuzufügen. Das Problem war die Lösung. Es war zu hoch, sodass der Speicherbedarf des Bildspeichers explodierte und die App abstürzte, weshalb dieser Fehler aufgetreten ist. Ändern Sie einfach die Größe Ihres Bildes mithilfe einer Site namens Nativescript Image Builder, damit ich das ldpi, mdpi und den Rest bekomme und es für mich gut funktioniert.
quelle
Für diesen Fehler wurde wie andere gesagt ein großes Bild (1800px x 900px), das sich in einem zeichnbaren Verzeichnis befand, ich habe das Bild bearbeitet und die Größe proportional mit Photoshop reduziert und es hat funktioniert ... !!
quelle
Wenn Sie Picasso verwenden, wechseln Sie wie folgt zu Glide.
Picasso entfernen
Picasso.get().load(Uri.parse("url")).into(imageView)
Glide ändern
Glide.with(context).load("url").into(imageView)
Effizienter Glide als Picasso zeichnen auf große Bitmap
quelle
Ich habe gerade das Verzeichnis drawable-xhdpi erstellt (Sie können es nach Bedarf ändern) und alle Bilder in dieses Verzeichnis kopiert.
quelle
Diese Lösung hat bei mir funktioniert.
Fügen Sie diese Zeilen in Ihr Manifest- Anwendungs- Tag ein
android:largeHeap="true" android:hardwareAccelerated="false"
quelle
Wenn Sie nicht möchten, dass Ihr Bild vorskaliert wird, können Sie es in den
res/drawable-nodpi/
Ordner verschieben.Weitere Informationen: https://developer.android.com/training/multiscreen/screendensities#DensityConsiderations
quelle
In meinem Fall musste ich die Android-Plattform entfernen und erneut hinzufügen. Etwas blieb hängen und das Kopieren meines gesamten Codes in eine andere App funktionierte wie ein Zauber - daher meine Idee, den Build für Android durch Entfernen der Plattform zu bereinigen.
cordova platform remove android cordova platform add android
Ich denke, es ist eine Art Bereinigung, die Sie von Zeit zu Zeit durchführen müssen :-(
quelle
Dies kann ein Problem mit Glide sein. Verwenden Sie diese Option, während Sie versuchen, auf viele Bilder zu laden, von denen einige sehr groß sind:
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); }
quelle
Versuchen Sie, ein XML- oder ein Vektor- Asset anstelle eines JPG oder PNG zu verwenden.
Der Grund liegt im Ausnahmenamen selbst auf der Hand, dh die Auflösung der Ressource ist zu groß zum Rendern.
Sie können mit Online-Tools wie https://svg2vector.com/ eine PNG-Datei für XML erstellen oder Ihr Bild dem Ordner drawable-xxhdpi hinzufügen.
quelle