>  Q&A  >  본문

请问一下android下软/弱引用的一个问题

我对软/弱引用看了也不少博客,但是还是有一点疑问,尤其是android 2.3 之后的软/弱引用机制
尝试搜索无果后,来这里请教一下,问题应该很简单,但是对我来说很困惑有点绕不过来弯.

谢谢

ViewStub 和其他很多地方都有用到WeakReference
弱引用不是在系统GC的时候如果它只被一个软引用所引用,那么它将会被回收吗?

ViewStub的源码中,在inflate() 一个ViewStub的之后
同时将inflate()完毕的view添加至新创建的WeakReference 中,
那么这个view 不就只?被一个软引用所引用了吗?

如果这时系统GC 那么view是不是被回收了?那么下次想从WeakReference 中获取它的时候是不是又可能会为null ?从而导致错误?

或者说这种情况是不会被系统GC的? 望大鸟指教一下愚昧小弟

PHP中文网PHP中文网2741일 전330

모든 응답(1)나는 대답할 것이다

  • PHPz

    PHPz2017-04-18 09:08:48

    WeakReference 메커니즘에 대한 이해는 정확하지만 ViewStub 코드에 대한 이해는 올바르지 않다고 생각합니다

    WeakReference는 ViewStub 및 기타 여러 곳에서 사용됩니다
    약한 참조가 시스템 GC 중에 소프트 참조로만 참조되는 경우 재활용됩니까?

    ViewStub의 소스 코드에서 ViewStub을 inflate()한 후
    동시에 inflate()로 완성된 뷰를 새로 생성된 WeakReference에 추가하면
    이 뷰는 단지 ? 소프트 참조로 참조되나요?

    관련 객체의 참조 관계는 다음과 같습니다.

    으아악 으아악

    따라서 inflatedView는 여전히 강력하게 참조되며 GC가 되지 않습니다

    회신하다
    0
  • 취소회신하다