Ich höre Änderungen im Hinblick auf Layout ein OnGlobalLayoutListener
mit:Kann ein nicht entfernter ViewTreeObserver-Listener Speicherlecks verursachen?
view.getViewTreeObserver().addOnGlobalLayoutListener(myListener);
Da ich so lange in die Ereignisse dieses Zuhörer interessiert als die Aussicht besteht ich keine Notwendigkeit sehen removeOnGlobalLayoutListener(myListener)
zu nennen.
Kann dies Speicherlecks verursachen oder wird der Listener Garbage zusammen mit der Ansicht gesammelt? Angenommen, der Listener enthält einen Verweis auf die Ansicht.
Der Hintergrund ist, dass ich ein Modul erstellen möchte, das an bestimmte Ansichten angehängt werden kann und auf Layoutänderungen basiert. Wenn das Entfernen nicht notwendig ist, wäre seine Erstellung genauso einfach wie new FancyModule(theView)
und der Konstruktor kümmert sich dann um die Bindung des Hörers. Wenn das Entfernen notwendig ist, müsste ich eine Destruktor-Methode implementieren, die ich gerne verhindern möchte.
Der Listener und die Ansicht enthalten nur eine zyklische Referenz zueinander. Keine andere Komponente ist beteiligt. Ich war mir nicht sicher, ob ein 'getViewTreeObserver() 'einer Ansicht möglicherweise Objekte zurückgeben könnte, die länger als die Ansicht selbst leben. – McFarlane
Nun, wenn nichts anderes den Referenzzyklus von außen hält, ist es in Ordnung. – Tomik