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

我对软/弱引用看了也不少博客,但是还是有一点疑问,尤其是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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!