请问一下android下软/弱引用的一个问题
PHP中文网
PHP中文网 2017-04-18 09:06:48
0
1
366

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

谢谢

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

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

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

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
PHPzhong

我觉得你对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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板