}
…
}
从
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
英文注释可以看出来,这个类的作用是保存一个View和它的位置(Rect),使用它的类能做通过 List<ViewLocationHolder>
的compare,能把这些View在原来的ViewGroup上排列好,而不用重新去计算这些view在ViewGroup上的顺序位置了。
我们在来解析一下源码:
注释1:这个静态类有个全局变量 mRoot,表示的是这个View的父View
注释2:因为他是以池子的形式存储,所以它的获取方式是 obtain()
,在池子中取出一个空的ViewLoacationHolder,如果取不出,就new一个出来。
注释3:拿到注释2的 ViewLocationHodler
,调用 init()
对它初始化
注释4:赋值mRoot
注释5:在clear()方法中,并没有把mRoot置空…
但从这里看,我们就已经知道了为什么泄漏了,在ViewGroup销毁的时候,由于其静态内部类ViewLocationHolder
的mRoot字段没有释放,所以它持有着这个ViewGroup的引用,导致ViewGroup的内存也不能释