本文已参与「新人创作礼」活动,一起开启掘金创作之路。
我们知道,在Activity中使用LiveData:observe()
可以监听到LiveData的变化,这里面owner参数传入的是当前Activity
进入observe()
内部,可以看到又把owner传给了LifecycleObserver的实现类LifecycleBoundObserver,还令这个LifecycleBoundObserver设置监听owner的生命周期变化
继续深入,发现在LifecycleBoundObserver的构造方法里把owner存了下来,也就是说整个LiveData持有了Activity的引用,而LiveData通常又位于ViewModel中,这样不会产生内存泄漏吗?
答案是不会,因为上面这个LifecycleBoundObserver对象已经可以监听Activity生命周期了,所以在Activity即将销毁的时候会调用
这样就会解除owner的引用啦~