sto ascoltando il layout cambiamenti di una vista utilizzando un OnGlobalLayoutListener
:Un listener ViewTreeObserver non rimosso può causare perdite di memoria?
view.getViewTreeObserver().addOnGlobalLayoutListener(myListener);
Dal momento che sono interessato alle vicende di questo ascoltatore fino a quando la vista esiste non vedo la necessità di chiamare removeOnGlobalLayoutListener(myListener)
.
Ciò può causare perdite di memoria o la garbage listener viene raccolta insieme alla vista? Supponiamo che l'ascoltatore abbia un riferimento alla vista.
Il backgound è che voglio creare un modulo che può essere collegato a determinati punti di vista e fa cose in base alle modifiche del layout. Se la rimozione non è necessaria, la sua creazione sarebbe semplice come new FancyModule(theView)
e il costruttore si occuperà quindi di legare l'ascoltatore. Se la rimozione è necessaria, dovrei implementare un metodo distruttore che vorrei impedire.
L'ascoltatore e la vista mantengono solo un riferimento ciclico l'uno con l'altro. Nessun altro componente è coinvolto. Non ero sicuro che una vista 'getViewTreeObserver()' potesse restituire oggetti che vivono più a lungo della vista stessa. – McFarlane
Bene, se nient'altro mantiene il ciclo di riferimento dall'esterno, allora va bene. – Tomik