Folks Laden, weiß ich nicht denken, dass dies ein Duplikat ist und nicht einer von denen, wie ich Ooms Fragen zu vermeiden tun. Dies ist eine echte Suche nach Wissen, also halten Sie auf die unten Stimmen bitte ...Warum Android mehr Speicher als benötigt zuteilen, wenn Bilder
Stellen Sie sich vor, ich habe eine JPEG
von 500x500
Pixel. Ich lade es als ARGB_8888
, die als "bad as it gets
" ist.
Ich würde Android erwarten 500x500x4 bytes = a little under 1MB
jedoch zuzuteilen, Blick auf einen Heapdump und Sie werden sehen, dass Android deutlich mehr, oft Faktoren 5-10
mal größer zuordnet.
Sie häufig gestellte Fragen finden Sie hier über OOMS wo der Stack-Trace eine heap request of say 15MB
zeigt, und es ist immer viel größer als nur erforderlich ist, um die Bytes des Bildes zu halten. Das OP fängt normalerweise einige Downvotes auf und wird dann mit Aktienantworten und Kommentaren über die Verwendung von weniger Speicher (danke Romain!) Und Skalierung bombardiert. Ich denke, es gibt mehr, als hier auffällt.
Jeder weiß, warum das ist? Wenn es keine offensichtliche Antwort gibt, werde ich einen SSCCE zusammensetzen, wenn es hilft.
PS. Ich nehme an, dass JPEG vs PNG usw. irrelevant ist, da wir über die Speichernutzung der Backing-Bitmap sprechen, die einfach x mal y BPP ist - oder bin ich langsam?
Sind Sie sicher, dass das Bild nicht durch seine Anwendung skaliert wird (z. B. durch Laden in ein ImageView, das nicht die gleichen Abmessungen hat)? Darüber hinaus sollten Sie, wenn Sie sich Ihren Heap Dump ansehen, genau sehen, wo die "Faktoren 5-10 mal größer" zugewiesen wurden - wo haben Sie diese Werte gesehen? "Ich werde ein SSCCE zusammenstellen, wenn es hilft" - bitte tun. – CommonsWare
Ah. Sieht so aus, als wäre ich langsam. Lassen Sie mich ein Beispiel versuchen und kommen Sie zurück, wenn und wenn ich finde, dass es nicht skaliert wird, wenn es angewendet wird. Danke – Simon
Seltsamerweise will der Typ in [dieser Frage] (http://stackoverflow.com/questions/4866653/read-in-jpg-as-rgb888-on-android) * * und ARGB8888, bekommt aber immer einen RGB565 . Vielleicht kannst du seine Methode benutzen? – GolezTrol