我对软/弱引用看了也不少博客,但是还是有一点疑问,尤其是android 2.3
之后的软/弱引用机制
尝试搜索无果后,来这里请教一下,问题应该很简单,但是对我来说很困惑有点绕不过来弯.
谢谢
ViewStub
和其他很多地方都有用到WeakReference
弱引用不是在系统GC的时候如果它只被一个软引用所引用,那么它将会被回收吗?
在ViewStub
的源码中,在inflate()
一个ViewStub
的之后
同时将inflate()
完毕的view
添加至新创建的WeakReference
中,
那么这个view
不就只?
被一个软引用所引用了吗?
如果这时系统GC
那么view是不是被回收了?那么下次想从WeakReference
中获取它的时候是不是又可能会为null
?从而导致错误?
或者说这种情况是不会被系统GC
的? 望大鸟指教一下愚昧小弟
PHPz2017-04-18 09:08:48
WeakReference 메커니즘에 대한 이해는 정확하지만 ViewStub 코드에 대한 이해는 올바르지 않다고 생각합니다
WeakReference는 ViewStub 및 기타 여러 곳에서 사용됩니다
약한 참조가 시스템 GC 중에 소프트 참조로만 참조되는 경우 재활용됩니까?
예
ViewStub의 소스 코드에서 ViewStub을 inflate()한 후
동시에 inflate()로 완성된 뷰를 새로 생성된 WeakReference에 추가하면
이 뷰는 단지 ? 소프트 참조로 참조되나요?
관련 객체의 참조 관계는 다음과 같습니다.
으아악 으아악따라서 inflatedView는 여전히 강력하게 참조되며 GC가 되지 않습니다