2 Stimmen

Drawables nativ Speicher lecken?

Ich lese dies Frage weil ich eine Menge heruntergeladener Ressourcen in eine App laden muss, die ich gerade schreibe, und ich war neugierig, ob es einen dramatischen Leistungseinbruch gibt, wenn ich das tue [im Vergleich dazu, dass ich sie in der .apk habe], und die "richtige" Antwort auf die Frage impliziert, dass es zwar keine Leistungsverschlechterung gibt, man sich aber darum kümmern muss, den Speicher wieder freizugeben, wenn man damit fertig ist, damit er nicht ausläuft.

Kann jemand dies bestätigen oder verneinen? Mein Eindruck war, dass ein geladenes Drawable genau wie alles andere beim Aufräumen der Activity GCed wurde. Ich würde sehr gerne wissen, ob das nicht wahr ist, und was der zuverlässigste Weg, um den Speicher in der besagten Instanz manuell zu sammeln ist.

Weiß jemand, ob es einen spürbaren Leistungsabfall beim Laden von Bildern von der SDCard im Vergleich zum Speicher des Telefons gibt? Ich bin kein Elektroingenieur, so, intuitiv, es scheint wie, da dies alle Festkörperspeicher ist, es sollte alles in etwa die gleiche Geschwindigkeit gelesen werden, aber ich würde gerne eine definitive Antwort zu bekommen.

1voto

haseman Punkte 10983

Schnelle Antwort:

Bitmaps benötigen zwei Durchläufe des Garbage Collectors, um aufgeräumt zu werden. Im ersten Durchgang wird das Java-Objekt freigegeben, im zweiten Durchgang die nativen Pixeldaten. Sie laufen nicht aus, aber zwischen dem Zeitpunkt, an dem Sie die Zeiger löschen, und dem zweiten Durchlauf des GC kann der Speicher knapp werden. Dies gilt unabhängig davon, von welcher Ressource sie stammen. Es ist immer eine gute Idee, recycle() auf einer Bitmap aufzurufen, wenn Sie sicher sind, dass sowohl Sie als auch das System mit ihnen fertig sind. Gingerbread ist aufgrund eines Fehlers in der Dalvik-VM besonders schlecht im Umgang mit "out of memory" Problemen und Bitmaps.

Meiner Erfahrung nach ist das Laden von Bildern aus der apk viel schneller als von der SD-Karte. 1) Sie sind in der apk zip-ausgerichtet (wenn Sie Ihre apk ausrichten, was Sie tun sollten) 2) Verschiedene Telefone haben unterschiedliche Zugriffszeiten auf die SD-Karte. Die allgemeine Regel ist, wenn sie auf der SD-Karte ist, wird sie LANGSAM geladen. Man kann es schaffen, Drawables aus dem internen Speicher zu laden (auch wenn es eine schlechte Idee ist). Sie kann nicht alles von der SD-Karte in den Hauptfaden laden. Niemals :-\

Wenn ich Sie wäre, würde ich beim Laden von Bildern so faul wie möglich sein, ich würde sie in der apk behalten, wenn möglich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X