摘要:浅谈 Android Architecture Components 使用和原理
Lifecycle把生命周期的变化抛出来,是ViewModel和LiveData实现的基础,一般不会直接用,作为参数传入ViewModel和LiveData.
ViewModel的核心价值是独特的生命周期,就一拥有独特生命周期的容器。
LiveData的核心价值是用来通知观察者更新数据。
AAC 实现MVP 。优点:解耦、自动化测试
Android Jetpack 架构组件最佳实践(这文章要细看)
在使用ViewModel时,如果页面仅仅是简单的展示数据没什么交互,可以把业务处理逻辑全部写在ViewModel中,不使用Presenter,但实际情况是大多数页面复杂且交互多,就想着怎样更好的处理ViewModel和View之间的通信,直到看到了这篇文章,参考之后得出了下图实现。
ViewModel和View之间通信模型
Communication between ViewModel and View
- UserProfileActivity引用UserViewModel,可观察其提供的UserLiveData、StatusLiveData、PageStateLiveData数据源变更分别处理数据显示、页面loading、跳转等UI操作。
- 注意Activity和ViewModel之间是单向引用。为避免内存泄漏,ViewModel不能持有任何Context引用。
- UserPresenter持有 UserViewModel的引用,通过ViewModel中的LiveData更新(回调)数据。(可以尝试不把ViewModel传入Presenter(传统的纯业务逻辑处理service),Presenter把处理结果和状态返回给ViewModel,在ViewModel中设置LiveData)
该模型如何响应用户事件的?比如点击某个按钮,需要提交信息给server,并在成功响应后刷新UI,这个过程中ViewModel和View是如何通信的?这里简单描述下该过程,首先是Activity将更新事件传递给ViewModel,ViewModel有将其委托给Presenter处理,Presenter将处理状态和结果,通过给图中指定的LiveData设置数据,liveData就能将新数据回调给Activity,这样页面上所有操作就都能通过数据来驱动了。