我聽使用OnGlobalLayoutListener
佈局視圖的變化:不能刪除的ViewTreeObserver偵聽器是否會導致內存泄漏?
view.getViewTreeObserver().addOnGlobalLayoutListener(myListener);
因爲我很感興趣,只要視圖是否存在我認爲沒有必要調用removeOnGlobalLayoutListener(myListener)
這個監聽的事件。
這可能導致內存泄漏,或者是與視圖一起收集的偵聽器垃圾?假設監聽者擁有對視圖的引用。
背景是,我想創建一個模塊,可以附加到某些視圖,並根據佈局更改做東西。如果不需要刪除,那麼它的創建就像new FancyModule(theView)
一樣簡單,然後構造函數負責綁定偵聽器。如果需要移除,我必須實現一個我想要阻止的析構函數方法。
偵聽器和視圖只保存彼此的循環引用。沒有涉及其他組件。我不確定一個視圖的getViewTreeObserver()是否可能返回比視圖本身更長的對象。 – McFarlane
好吧,如果沒有別的東西從外面持有參考週期,那就沒問題。 – Tomik