Ich habe ein ListView
mit einem TextView
und in jedem TextView
mehrere Elemente mit jeweils einer kurzen Beschreibung. Um verschiedene Stile für die Items und die Beschreibung zu verwenden, verwende ich mehrere Span-Objekte: ClickableSpan
, ForegroundColorSpan
, BackgroundColorSpan
, AbsoluteSizeSpan
und StyleSpan
.
Im Durchschnitt hat die ListView
10 TextView
s, und jede TextView
hat 10 Paare von Item / Beschreibung und jedes Paar verwendet etwa 6 SpanObject
s, also insgesamt ~ 600 SpanObject
s pro% Code%. Und wenn der Benutzer auf eines der Elemente klickt, wird ListView
gelöscht und erneut gezeichnet, wodurch ein weiterer Satz von 600 ListView
s generiert wird.
Ich frage mich also, ob es eine bessere Idee wäre, für jedes Element und jede Beschreibung ein SpanObject
zu erstellen und es über XML zu formatieren, anstatt die TextView
s mit span zu gestalten, so würde es etwa 200% geben. co_de% s und keine TextView
s.
Als Anmerkung habe ich nicht mit diesem Ansatz begonnen, weil die Hierarchiebaumstruktur von Sichten komplexer sein würde und TextView
s teurer wäre, um die SpanObject
s zu erstellen, aber jetzt sehe ich die Anzahl von TextView
s Ich erstelle ich bin mir nicht sicher, was besser ist. Ich denke auch darüber nach, einen Recycling-Mechanismus zu schreiben, aber ich bin mir nicht sicher, ob es das wert ist oder das sollte kein Problem für Android GC sein.
Die Menge an TextViews und SpanObjects, die Sie haben, ist unglaublich teuer für jedes Android-Gerät, und das Laden jedes Mal kann nicht nur Verzögerung verursachen, sondern möglicherweise auch einen OOM-bezogenen Crash (nicht genügend Arbeitsspeicher).
Die Lösung hierfür besteht in der Verwendung von RecyclerView und CardView. Schreiben Sie zuerst Ihren RecyclerView-Adapter. Schreiben Sie innerhalb dieser Klasse eine statische Klasse, die alle TextViews und andere Elemente innerhalb jeder Karte lädt (eine Karte ist im Wesentlichen ein Listenelement). Auf diese Weise werden alle Ihre Artikel in OnCreate geladen und nicht kontinuierlich generiert. Dies ist besonders hilfreich, wenn Sie Fragmente verwenden. Dieser Link kann für Sie von Nutzen sein: Ссылка
Hier ist ein Beispiel für eine RecyclerView-Adapterklasse mit der statischen Klasse:
%Vor%Tags und Links android garbage-collection performance textview