youlookwhat / CloudReader

🗡️ 云阅:一款基于网易云音乐UI,使用玩Android Api,Retrofit2 + RxJava2 + Room + MVVM-databinding架构开发的Android客户端
https://youlookwhat.github.io/CloudReader
Apache License 2.0
4.94k stars 1.33k forks source link

关于ViewModel #113

Closed yezihengok closed 4 years ago

yezihengok commented 4 years ago

最近刚学习,不太明白 想问问作者ViewModel是怎么避免内存泄漏的呢

youlookwhat commented 4 years ago

不好意思 最近公司项目比较忙,回复的比较晚。 按我的理解,ViewModel并不是说使用了就避免内存泄漏了,而是要做一些操作。

  1. ViewModel里面数据的变化通过观察者模式改变Activity中View的变化,而中间的媒介是LiveDataLiveData会和对应Activity的生命周期绑定owner.getLifecycle().addObserver(wrapper);所以当Activity销毁的时候,如果数据返回了也是不会渲染数据的,而且对应的LiveData也会被移除removeObservers

  2. ViewModel里自带一个onCleared()方法,此方法会在Activity销毁时调用,使用者可以在这里做一些释放资源的操作。

youlookwhat commented 4 years ago

@yezihengok

yezihengok commented 4 years ago

thanks~~