《Android高级进阶》学习笔记
第二篇 系统架构篇
第16章: MVP模式及其在Android中的实践
1、MVP的基本概念
View:视图层,包含界面相关功能,如Activity、Frangment、View、Adapter等,该层专注于用户的交互。
Presenter层:逻辑控制层,充当中间人的角色,用来隔离View层和Model层。例如,接收View层的网络数据加载请求,并分发给对应的Model处理,同时监听Model层的处理结果,最终将其反馈给View层,从而实现界面的刷新。
Model层:封装各种数据来源,例如远程网络数据、本地数据库数据等,对Presenter层提供简单易用的接口。
2、MVP与MVC的区别
MVP模式:
MVC模式:
第17章: MVVM模式及Android DataBinding实战
MVVM(Model-View-ViewModel)相比MVP,将Presenter改为了ViewModel,同时实现View和ViewModel的双向绑定。View层的变化会自动导致ViewModel发生变化,ViewModel的数据变化也会自动实现View的刷新,开发者可以不用直接处理View和数据的更新操作,MVVM框架会完成这一切。
MVVM模式:
在Google I/O 2015大会上,Android开发团队发布了官方的MVVM模式支持的函数库Data Binding Library。
第18章:观察者模式的拓展:事件总线
事件总线是消息(事件)流动的管道,不同组件和模块之间的消息传递都是通过总线来实现,组件与组件、模块与模块之间不直接进行通信。简而言之,事件总线就是用来简化Android应用中组件或者模块间的通信,从而实现模块间解耦的目的。
1、基本原理
事件Event:一个普通的POJO类(Plain Ordinary Java Object),只包含数据,不包含对数据的操作。事件有两种类型:普通事件和粘滞事件,粘滞事件的特点是在事件发布后,订阅者才开始订阅该类型事件,那么它依然可以收到这个事件,而普通事件是收不到的。
订阅者Subscriber:订阅某种类型事件的对象。订阅者可以引入优先级的概念。
发布者Publisher:事件的源头,发布某种类型事件的对象。
总线EventBus:负责订阅者、事件等信息的存储,同时处理事件的流动和分发。通过总线,订阅者和发布者是解耦的。
2、与Android BroadcastReceiver及观察者模式的区别
Android的BroadcastReceiver更适合用于监听Android系统级的广播时间,例如网络状态变化、电量变化等。对于业务相关的事件变化,使用BroadcastReceiver太重量级了。
观察者模式用于简单的事件监听没有问题,但如果APP全局都使用观察者模式来解决组件和模块间的通信,那么可能会造成接口膨胀的问题。观察者模式要求开发者自己实现事件的生产、分发和处理,需要进行很好的设计。同时,观察者模式不支持粘滞事件,不支持事件优先级等特性。当然,性能上来说,观察者模式要比事件总线性能高,毕竟它不需要处理很多其他的特性。
事件总线使用起来很方便,但只有在组件或者模块间通信时才使用它。
第19章:书写简洁规范的代码
第20章:基于开源项目搭建属于自己的技术堆栈
1、APP的整体架构
应用层:专注于行业领域的实现,例如金融、支付、地图导航、社交等,它直接面向用户,是用户对产品的第一层感知。
基础框架层:专注于技术领域的实现,提供APP公有的特性。它是用户对产品的第二次感知,例如性能、稳定性等。
2、日志记录
- Logger
- LogUtils
- timber
3、JSON解析
- gson:Google出品
- jackson:针对Java语言,一种通用的JSON函数库
- Fastjson:阿里巴巴出品,号称是目前Java语言中最快的JSON库。有专门的Android版本:fastjson.android
- LoganSquare
4、数据库操作
- greenDAO:轻量级且快速的ORM框架,专门为Android高度优化和定制。
- Realm:一个全新的移动数据库引擎。
5、网络通信
- android-async-http
- OkHttp
- Volley:Google出品
- Retrofit
6、图片缓存和显示
一般的图片缓存都设置两级缓存:内存缓存和磁盘缓存。
- BitmapFun
- Picasso
- Glide
- Fresco:Facebook出品,具有三级缓存:两级内存缓存和一级磁盘缓存,可以极大降低APP出现OOM的概率。
- Android-Universal-Image-Loader