This answer teilt mir mit, dass das Aufrufen der recycle()
-Methode eines TypedArray es ermöglicht, dass Garbage Collected gesammelt wird. Meine Frage ist, warum TypedArray benötigt speziell eine Methode, um Müll zu sammeln? Warum kann es nicht einfach darauf warten, Müll gesammelt zu werden wie ein normales Objekt?Warum sollte ein TypedArray recycelt werden?
9
A
Antwort
5
Dies ist für die Zwischenspeicherung erforderlich. Wenn Sie recycle
aufrufen, bedeutet dies, dass dieses Objekt von diesem Punkt aus wiederverwendet werden kann. Intern enthält TypedArray
nur wenige Arrays. Um nicht jedes Mal Speicher zuzuweisen, wenn TypedArray
verwendet wird, wird es in der Klasse Resources
als statisches Feld zwischengespeichert. Sie können an TypedArray.recycle()
Methode Code aussehen:
/**
* Give back a previously retrieved StyledAttributes, for later re-use.
*/
public void recycle() {
synchronized (mResources.mTmpValue) {
TypedArray cached = mResources.mCachedStyledAttributes;
if (cached == null || cached.mData.length < mData.length) {
mXml = null;
mResources.mCachedStyledAttributes = this;
}
}
}
Also, wenn Sie recycle
Ihr TypedArray
Objekt aufrufen wird gerade in den Cache zurück.
2
@Andrei Mankevich Ich überprüfe nur die neueste Version von Android SDK, und es scheint, es gibt einige Änderungen zu recyceln(). Bitte überprüfen Sie die folgenden Codes:
/**
* Recycle the TypedArray, to be re-used by a later caller. After calling
* this function you must not ever touch the typed array again.
*/
public void recycle() {
if (mRecycled) {
throw new RuntimeException(toString() + " recycled twice!");
}
mRecycled = true;
// These may have been set by the client.
mXml = null;
mTheme = null;
mResources.mTypedArrayPool.release(this);
}
Verwandte Themen
- 1. Warum sollte ein Software-Entwicklungsprozess eingeführt werden?
- 2. Wie recycelt Hikari Verbindungen?
- 3. Sollte ein UdpClient entsorgt werden?
- 4. Warum sollte ein Bool beim Multithreading in C# volatil werden?
- 5. Warum sollte dieser .htaccess-Ordner entfernt werden?
- 6. Warum sollte das Window.Close-Ereignis weitergegeben werden?
- 7. Nur XML TypedArray Erstes Bild anzeigen
- 8. NSNotificationCenter: Warum sollte removeObserver aufgerufen werden?
- 9. Wann sollte ein neuer Ausnahmetyp verwendet werden?
- 10. Warum sollte ein Entwickler Silverlight verwenden?
- 11. Drb und „recycelt Objekt“ Ausnahme
- 12. Warum sollte pop() ein Argument nehmen?
- 13. listView recycelt Ansicht beim Scrollen
- 14. Wann recycelt IIS den Arbeitsprozess?
- 15. Warum sollte ein Hintergrund-Thread ausgeführt und dann in einer Sekunde gestoppt werden? Sollte es für immer ausgeführt werden?
- 16. Warum sollte ein Compiler diese Assembly generieren?
- 17. Wann sollte ein IOC-Container verwendet werden?
- 18. Wann sollte ein Singleton verwendet werden?
- 19. Wann sollte ein Event Bus verwendet werden?
- 20. Wo sollte ein kanonischer Domainname durchgesetzt werden?
- 21. Wann sollte ein ManualResetEvent entfernt werden?
- 22. Warum sollte ich ein HashSet über ein Dictionary verwenden?
- 23. Warum sollte man
- 24. Warum sollte [0] bei Verwendung des neuen FormData() angegeben werden?
- 25. xe: objectData - Objekt wurde entfernt oder recycelt
- 26. Warum sollte Docker oben auf einer virtuellen Maschine verwendet werden?
- 27. Wie (und warum) sollte eine JUL-Konfigurationsklasse initialisiert werden?
- 28. Warum sollte das nicht kompilieren?
- 29. Sollte ViewData niemals verwendet werden?
- 30. Warum sollte die Iteration anstelle der Tail-Rekursion verwendet werden?
/** * Bereiten Sie die TypedArray, durch einen späteren Anrufer wiederverwendet werden. Nach dem Aufruf * dieser Funktion dürfen Sie das typisierte Array nicht mehr berühren. */ public void recycle() { if (mRecycled) { throw new Runtime (toString() + "recycelt zweimal!"); } mRecycled = wahr; // Diese wurden möglicherweise vom Client festgelegt. mXml = null; mTheme = null; mResources.mTypedArrayPool.release (this); } – Sam003