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

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

谢谢

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

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

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

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

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
PHPzhong

Saya rasa pemahaman anda tentang mekanisme WeakReference adalah betul, tetapi pemahaman anda tentang kod ViewStub adalah salah

WeakReference digunakan dalam ViewStub dan banyak tempat lain
Jika rujukan yang lemah hanya dirujuk oleh rujukan lembut semasa sistem GC, adakah rujukan itu akan dikitar semula?

Ya

Dalam kod sumber ViewStub, selepas inflate() a ViewStub
pada masa yang sama menambah paparan yang dilengkapkan oleh inflate() pada WeakReference yang baru dibuat,
maka bukankah pandangan ini hanya ? Adakah ia dirujuk oleh rujukan lembut?

Hubungan rujukan objek berkaitan adalah seperti berikut:

inflate()第一次执行前:

parentView --强-> stubView

此时inflatedView还不存在
inflate()第一次执行后:
parentView --强-> inflatedView 
stubView --弱->inflatedView

此时parentView已经不引用stubView了,stubView在inflate()中用inflatedView替换了parentView中的自己

Jadi inflatedView masih dirujuk dengan kuat dan tidak akan menjadi GC

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan