组件化
- app:主项目
- home,product,mall,account分别对应项目四个tab
- productDetail是home和product公用的产品详情页
- basilib:基础类库,一些公共的第三方包放在这里
- basicres:公共资源,BaseActivity,BaseFragment,BaseApplication,图片等
- remote:网络
- mediator:中介者,组件之间通过中介者来通讯
组件之间的组合
在每个组件的gradle.properties可以设置这个组件依赖了哪些组件
如app的gradle.properties
product的gradle.properties
关于组件化详细内容参考
https://github.com/luojilab/DDComponentForAndroid
Dagger2
Dagger2是一个依赖注入的框架,目的是为了解耦,达到控制反转的目的
项目中di包里的都是Dagger2的内容
官方地址:
https://github.com/google/dagger
网络
网络使用了okhttp + retrofit2 + rxjava2
官网
- retrofit2: http://square.github.io/retrofit/
- okhttp: http://square.github.io/okhttp/
- rxjava: https://github.com/ReactiveX/RxJava
rxlifecycle
rxJava存在一个普遍的问题就是有可能会发生内存泄露(比如从页面A跳转到页面B,页面A应该及时取消订阅),所以需要用到rxlifecycle
如com.madai.remote.repository.ProductRepository中的bindUntilEvent
项目架构
业务组件(如home,product等)的设计参照了看这里
并且做了一些精简
考虑到本项目对于数据持久化的需求不是很大,所以去掉了ROOM(本地数据库)
使用到了LiveData,ViewModel
第三方库的引入
所有第三方库的内容都写在versions.gradle,以保证各个组件引用的库版本一致
Databinding
Databinding用于界面和数据的绑定
例
官方文档: https://developer.android.com/topic/libraries/data-binding/index.html
网友评论