Ich habe eine veröffentlichte App, die beim Start auf Android N abstürzt, wenn die neu eingeführte Display size
OS-Einstellung auf einen zu großen Wert eingestellt ist.
Wenn ich in logcat schaue, sehe ich die folgende Meldung:
Java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.
Ich habe das Problem in meiner ersten Aktivität mit einer ImageView verfolgt, die ein großes Hintergrundbild von Nice zeigt. Das fragliche Bild ist 2048x1066 und befindet sich in meinem generischen drawables
-Verzeichnis. Daher wird dieses Bild unabhängig von der Dichte verwendet.
Alles funktioniert in Ordnung, wenn die Einstellung Display size
Small
ist. Aber wenn ich zu Default
gehe, funktioniert es nicht mehr. Wenn ich dann das Bild mit einem kleineren austausche, funktioniert es bei Default
, aber wenn ich zu Large
gehe, funktioniert es nicht mehr.
Meine Vermutung ist, dass das Anpassen von Display size
bewirkt, dass sich Ihr Gerät wie ein physisch kleineres Gerät mit einer höheren Pixeldichte verhält. Aber ich verstehe nicht, was ich hier machen soll. Wenn ich progressiv kleinere Bilder für progressiv höhere Auflösungen einlege, sieht das auf großen Displays nicht gut aus. Oder verstehe ich etwas nicht?
Alle Hinweise wären sehr dankbar.
In meinem Fall verschiebe ich die (hochauflösende) Splash-Bitmap von drawable nach drawable-xxhdpi, um die Lösung zu finden.
Ich hatte das gleiche Problem. Ich hatte nicht den Verdacht, dass mein Startbildschirm das Problem ist, da ist angezeigt wird, wenn die App gestartet wird, aber es stellte sich heraus, dass der Startbildschirm das Problem ist.
Der Begrüßungsbildschirm in meinem Fall hat eine xxhdpi-Auflösung und wurde versehentlich im Ordner drawable anstelle von drawable-xxhdpi abgelegt. Dies führte dazu, dass Android davon ausging, dass der Begrüßungsbildschirm eine mdpi-Auflösung hatte und das Bild auf das 3 × 3-fache seiner erforderlichen Größe skalierte und versuchte, eine Bitmap zu erstellen.
Verschieben Sie Ihr Bild in das Zeichenformat nach Mipmap-xxhdpi. Ihr Bild ist im Bitmap-Format. Sie sollten Ihr Bild also im Mipmap-Ordner ablegen. Dann funktioniert es
Ich weiß nicht, ob es jemandem helfen würde, aber ich lass es einfach hier ... In meinem Fall war das Problem nur auf Sumsung-Geräten mit Android 7 und das Problem war im Splash-Bildschirm. Nachdem Sie die Höhe auf 1024 px geändert haben, funktioniert alles einwandfrei
Versuchen Sie, die Bitmap.Factory-Klasse zu verwenden. Dieser Link hilft Ihnen dabei Große Bitmaps effizient laden
In meinem Fall habe ich das Problem gelöst, nachdem ich Android:hardwareAccelerated="false"
in die applicationg
der Manifestdatei eingefügt habe.
In meinem Fall habe ich einfach die Zeichenfläche des Bildes, das im Hintergrund verwendet wird, mit Paint3d geändert (oder Sie können eine andere verwenden). Hier teile ich einen Screenshot nur durchlaufen.
wenn Sie Picasso verwenden, wechseln Sie zu Glide.
Picasso entfernen
Picasso.get().load(Uri.parse("url")).into(imageView)
Glide ändern
Glide.with(context).load("url").into(imageView)
Effizienter
Die Symboldateien sind zu groß für Android, um effizient und reibungslos geladen zu werden. Android erkennt dies mit seinen intelligenten Algorithmen.
Sie können die Symboldateien mit Final Android Resizer by asystat skalieren. Verändere sie in "xhdpi" oder niedriger.
Platzieren Sie die verkleinerten Fotos in einer Zeichnung oder überschreiben Sie die vorhandenen großen Symboldateien.
Dann bist du fertig.
wenn Sie Glide verwenden und 1k Bilder gleichzeitig laden oder Bilder laden, ist dies ein Problem des Gleitens oder was auch immer Sie zur Einstellung der Bildansicht verwenden. Sie können es einfach lösen, indem Sie den Skalentyp in gleiten anwenden.