2013-07-03 4 views
10

Während meiner Android App an einem bestimmten Punkt Debuggen ich eine riesige Menge an Einträgen in der LogCat mit denTag: TextLayoutCache Text: Cache-Wert gelöscht

Tag: TextLayoutCache Text: Cache Value 0x51b9f578 deleted, size=168 (the hexa value changes from entry to entry) 

Wer weiß, was diese über das Sehen? Speicherleck? Irgendwelche Ideen, wie man es löst, wenn es ein Problem ist? Danke!

Antwort

5

Es nicht der Fall ist scheint eine definitive Antwort im Netz zu sein, also habe ich mir den Code für TextLayoutCache.cpp angesehen. Sieht gut aus für mich. Es werden Textlayoutdaten zwischengespeichert, um die Leistung zu verbessern. Derzeit gibt es eine feste Standardcachegröße von 0,5 MB, die in TextLayoutCache.h definiert ist.

Wenn Sie also Layout-Text in einen festen Satz von Werten ändern (< 0,5 MB), wird die Protokollnachricht nicht angezeigt.

Wenn Sie den Text in dynamische Werte ändern, wird der Cache schließlich gefüllt und der Cache-Eintrag für LRU (Least Recently Used) wird gelöscht, und Sie sehen die Protokollnachricht. Es ist nur eine Debug-Nachricht, kein Fehler, kein Leck. Es ist eine nützliche Leistungsmetrik darüber, wie Android-Internals unsere App handhaben.

Beachten Sie, dass TextLayoutCache nicht in Android-Versionen> = 5.

0

stieß ich auf gleiches Problem, wenn ich meine Textview Werte von Handler Aktualisierung durch Bezugnahme dieser gesammelten Instanzen mit runnable &

Ich sammelte Instanz von Textviews von findViewById() in Variablen, dann Werte von Textview zu aktualisieren.

Also, wie ich beobachtet, brauche ich keine Instanz dieser Textansicht außerhalb meiner Handler, also verwende ich einfach findViewById() innerhalb Handler und aktualisiert meine Textviews.

schreiben Sie Ihre findViewById() in Zusammenhang ID Nummer benötigen. (Etwa in Klammern Ihrer Funktion sprechen sie mit .. in meinem Fall.)

Hope this helps ...

+0

Dank verwendet wird, ich es versuchen würde, aber irgendwie, trotz, wenn es funktioniert, halte ich den Fehler nicht zu verstehen, wie/wann/Was es ist wird zwischengespeichert. BTW, ich überprüfte und ich verwende die Referenz an mehreren Stellen, so dass ich nicht die Findbyid jedes Mal aufrufen möchte, wenn ich eine Methode in der Klasse verwende, anstatt nur eine Referenz zu haben und sie zu verwenden. – polonskyg

+0

Wie ich erwähnt habe, stieß ich während der Aktualisierung von TextView von Thread kontinuierlich darauf. Wenn Sie findViewById nicht aufrufen, fügt es diese Zeilen zu Ihrem Logcat hinzu. Es ist nicht mit Speicherverlust verbunden, ich habe die Frage mit Grund beantwortet, warum es passiert (in meinem Fall). – MobileEvangelist

+0

Ok, ich habe es versucht, weiß es, aber immer wieder zu sagen, könnte ein anderes Problem sein. Trotzdem danke! – polonskyg

Verwandte Themen