浅识LiveData与Lifecycles的联系

191 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

我们知道,在Activity中使用LiveData:observe()可以监听到LiveData的变化,这里面owner参数传入的是当前Activity

进入observe()内部,可以看到又把owner传给了LifecycleObserver的实现类LifecycleBoundObserver,还令这个LifecycleBoundObserver设置监听owner的生命周期变化

继续深入,发现在LifecycleBoundObserver的构造方法里把owner存了下来,也就是说整个LiveData持有了Activity的引用,而LiveData通常又位于ViewModel中,这样不会产生内存泄漏吗?

答案是不会,因为上面这个LifecycleBoundObserver对象已经可以监听Activity生命周期了,所以在Activity即将销毁的时候会调用

这样就会解除owner的引用啦~