一个完整的APP整体架构,是要从多个方面进行考虑的,下面我就写一下搭建属于咱们自己的技术站要注意的方面。
A、APP的整体架构
(1)从较高的层次讲
一个App的整体架构可分为两层,即应用层和基础框架层
QQ图片20181017173601.png
一个理想的APP架构:
首先应该是支持跨平台开发;
其次应该具有清晰的层次划分,同一模块间的充分解耦,模块内部符合面向对象设计六大原则;
最后应该在功能、性能、稳定性等方面达到综合最优,应用层以下都属于基础框架层:基础框架层包括:组件层、基础层和跨平台层
QQ图片20181017173758.png
主要讲一下基础层,如何计入开源函数库搭建属于自己的一个基础堆栈
B、技术选型的考量点
首先明确的是,我们怎么选择开源函数库或者第三方SDK`
QQ图片20181017173903.png
C、日志记录能力
日志记录无论在服务开发还是移动开发,都有一个基础且重要的能力,我们需要定位错误,大多依赖日志信息,一个简洁灵活的日志记录模块是相当重要的。Android 提供了Log类来记录日志,有一个优秀的Logger开源日志记录库,同样是基于系统的Log类基础上进行的封装,但新增了如下超赞的特性
Logger开源日志记录库:
https://github.com/orhanobut/logger
虽然支持JSON、XML的格式输出,但是并不支持如List、Set、Map和数组等常见Java集合类。使用LogUtlis开源库,他实现了支持直接打印数据集合,如List、Set、Map、数组等。
Logger只支持输入日志到Logcat,但项目开发中往往还存在将日志保存到磁盘中的需求,让二者结合起来,这样我们遇到timber.
Timber是JakeWharton开源的一个日志记录库,它的特点是可扩展的框架,开发者可以方便快捷地集成成不同类型的日志记录方式,例如:打印日志到Logcat、到文件、到网络等,timber通过一昂代码就可以同时调用多种方式。
他是由不同的日志树组合而成,如:Logcat记录树、文件记录树、网络记录树等,森林对象提供的接口进行日志打印,每种类型树可以通过种植操作来把自己添加到森林对象中,或者通过移除操作从森林对象中删除,从而实现该类型日志记录的开启和关闭。
最终我们的日志记录模块由timber+Logger+LogUtils组成,轮子的兼容合并就得靠我们自己实现你,同时我们还得增加打印到文件的日志树和打印到网络的日志树实现。
D、JSON解析能力
Android 系统提供原生的提供了JSON解析的API,但是他的速度非常慢,而且没有提供简洁方便的接口来提高开发者的效率和降低出错的可能,通常情况下我们都是重新选择其他优秀的JSON解析实现,目前JSON解析的开源实现主要包括如下几种:
(1)JSON函数库对比
QQ图片20181017174307.png综合考虑的话使用Fastjson.android是最好的,下一章我搭建的是gson
E、数据库操作能力
无论是iOS平台还是Android 平台,底层数据库都是基于开源的SQLite实现,然后再系统层封装成用于应用层的API,虽然直接使用系统的据库API性能很高,但是API接口不是很方便使用,一不小心就会引入Bugs,而且代码的视觉效果不佳,因此引入一系列的对象关系映射(ORM)框架:
greenDAO:https://github.com/greenrobot/greenDAO
ormlite-android:https://github.com/j256/ormlite-android
Realm:https://realm.in/
根据综合性能,包的大小以及开源库的可持续发发展的因素,选greenDAO
F、网络通信能力
QQ图片20181017174800.png QQ图片20181017174835.png所以经过综合对比我使用的是Retrofit2
G、图片缓存能力
传统的图片缓存方安中设置有两级缓存,分别是内存缓存,和磁盘缓存,在Facebook退出的Presco中,他增加了一级缓存,也就是Native缓存,极大地减少了OOM出现的概率
BitmapFun:https://developer.android.com/training/displaying/index.html
Picasso:https://github.com/square/picasso
Glide:https://github.com/bumptech/glide
Fresco:https://github.com/facebook/fresco
Image-Loader:https://github.com/nostra13/Android-Universal-Image-Loader
根据APP对图片显示和缓存的需求从低到高排序:
BitmapFun < Picasso < Android-Universal-Image-Loader < Glide < Fresco
注:如果APP计划使用React Native进行部分模块功能的开发的话,那么在基础函数库选择方面需要考虑和React Native 的依赖库的复用,这样可以减少引入React Native所增加的大小,可复用的函数库有:Okhttp、Fresco等。
故下个框架搭建将会用到:Retroft2网络框架 + Glide图片加载 + Gson数据解析 + Logger开源
网友评论