java中的引用类型包括强引用、弱引用、软引用和虚引用。具体各种引用类型的作用和差别这里就不将了,这里主要讲一个在实际开发过程中遇到的一个弱引用的问题,做个记录。
class MainActivity : AppCompatActivity() {
var view : View ? =null
lateinit var viewWeakRef: WeakReference<View>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
testView.setOnClickListener {
view = View(this)
Log.e("andytest", "view = $view")
val ref = viewWeakRef.get()
Log.e("andytest", "ref = $ref")
}
view = View(this)
Log.e("andytest", "begin view = $view")
viewWeakRef = WeakReference<View>(view)
}
}
这是一段demo的代码,在代码中我们有两个成员变量,一个强引用的view和一个弱引用的viewWeakRef,初始化时这两个引用对应的是同一个对象。在点击事件中我们为view重新赋值,然后打印view的对象和弱引用的对象。
会发现这两个的对象不是同一个,也就是无论view的对象怎么变,弱引用中引用的对象都是开始赋值的那个对象