问题描述
我对软/弱引用看了也不少博客,但是还是有一点疑问,尤其是android 2.3 之后的软/弱引用机制尝试搜索无果后,来这里请教一下,问题应该很简单,但是对我来说很困惑有点绕不过来弯.
谢谢
ViewStub 和其他很多地方都有用到WeakReference 弱引用不是在系统GC的时候如果它只被一个软引用所引用,那么它将会被回收吗?
在ViewStub的源码中,在inflate() 一个ViewStub的之后同时将inflate()完毕的view添加至新创建的WeakReference 中,那么这个view 不就只?被一个软引用所引用了吗?
如果这时系统GC 那么view是不是被回收了?那么下次想从WeakReference 中获取它的时候是不是又可能会为null ?从而导致错误?
或者说这种情况是不会被系统GC的? 望大鸟指教一下愚昧小弟
问题解答
回答1:我觉得你对WeakReference机制的理解没问题,对ViewStub代码的理解不对
ViewStub 和其他很多地方都有用到WeakReference弱引用不是在系统GC的时候如果它只被一个软引用所引用,那么它将会被回收吗?
会
在ViewStub的源码中,在inflate() 一个ViewStub的之后同时将inflate()完毕的view添加至新创建的WeakReference 中,那么这个view 不就只?被一个软引用所引用了吗?
相关对象的引用关系是这样的:
inflate()第一次执行前:parentView --强-> stubView此时inflatedView还不存在
inflate()第一次执行后:parentView --强-> inflatedView stubView --弱->inflatedView此时parentView已经不引用stubView了,stubView在inflate()中用inflatedView替换了parentView中的自己
所以inflatedView仍然被强引用,不会被GC

 
  