一、app的整体架构
从较高的层次讲,一个APP的整体架构可以分为两层,即应用层和基础框架层。
1、应用层专注于行业领域的实现,如金融、支付、地图、社交等,它直接面向用户,是用户对产品的第一层感知。
2、基础框架层专注于技术领域的实现,提供APP共有的特性,避免重复造轮子,它是用户对产品的第二层感知,例如性能、稳定性等。
一个理想的APP架构,首先应该是支持跨平台开发的;其次应该具有清晰的层次划分,同一层模块间充分解耦,模块内部符合面向对象设计的六大原则;最后应该在功能、性能、稳定性等方面达到综合最优。基于以上的设计原则,可以得到如下APP架构图,最上层是应用层,应用层以下都属于是基础框架层,可以看到基础架构层包括:组件层、基础层和跨平台层。
二、技术选型
选择开源函数库或者第三方sdk,一般需要综合考虑以下几个方面。
1、特性:提供特性是否满足项目的需求。
2、可用性:是否提供了简洁便利的API,方便开发者集成使用。
3、性能:性能不能太差,否则项目后面性能优化会过不去,可能会出现需要替换函数库的情况。
4、文档:文档应该比较齐全,且可读性强。
5、技术支持:遇到问题或者bug,是否能够及时得到官方的技术支持很重要。
6、大小:引入函数库会增加apk大小,需要慎重使用。
7、方法数:如果函数库方法数太多,积累起来会导致app遇到64k问题。
三、日志记录能力
日志记录无论在服务端还是移动端开发,都是一个基础且重要的能力。
开源库:
Logger: https://github.com/orhanobut/logger
LogUtils: https://github.com/pengwei1024/LogUtils/
timber:https://github.com/JakeWharton/timber
timber是JakeWharton开发的一个日志记录库,它的特点是可扩展框架,开发者可以方便便捷地集成不同类型的日志记录方式,例如打印日志到Logcat,打印到日志文件、打印日志到网络等,timber通过一行代码可以调用多种方式。
四、JSON解析能力
移动端与服务端通信的数据格式,如果没有特殊需求的话,一般使用json格式。Android系统提供了原生的JSON解析API,但是它的速度非常慢,而且没有提供简洁方便的接口来提高开发者效率和降低出错的可能。因此我们一般选用其他优秀的JSON解析实现。目前JSON解析的开源实现主要包括如下几种:
1、gson: https://github.com/google/gson
2、jackson:https://github.com/FasterXML/jackson
jackson是java语言的一个流行JSON函数库,并没有为Android优化定制过,因此函数包中含有很多非必要的api,相比其他JSON函数库,用于Android平台会更显著的增大最终生成APK的体积。
3、Fastjson:https://github.com/alibaba/fastjson
Fastjson是阿里巴巴公司出品的一个Java高性能且功能完善的JSON函数库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提示到极致,号称是目前Java语言中最快的JSON库。Fastjson接口简单易用。
Fastjson还存在一个专门为Android定制的版本:
compile 'com.alibaba:fastjson:2.0.19.android'
4、LoganSquare:https://github.com/bluelinelabs/LoganSquare
综合:
gson:232KB
jackson:1.5MB
Fastjson:417KB
Fastjson.android:256KB
LoganSquare:307KB
一般选用gson或者fastjson.android作为基础技术堆栈中JSON解析和序列化库。
五、数据库操作能力
无论Android还是IOS平台,底层数据库都是基于SQLite实现,然后在系统层封装成用于应用层的API。虽然直接使用系统数据库的api性能很高,但这些api接口并不方便开发者使用。为了解决这个问题,一系列的对象关系映射(ORM)框架涌现出来,比较有名的有:
ActiveAndroid:https://github.com/pardom-zz/ActiveAndroid
ormlite:https://github.com/j256/ormlite-android
greenDAO:https://github.com/greenrobot/greenDAO
Realm:https://github.com/realm/realm-java
综合考虑:一般选用greenDAO。
六、网络通信能力
1、android-async-http:https://github.com/android-async-http/android-async-http
2、OkHttp:https://github.com/square/okhttp
3、Volley:https://github.com/google/volley
4、Retrofit:https://github.com/square/retrofit
准确的说,Retrofit并不是一个完整的网络请求函数库,而是将REST API转换成Java接口的一个开源函数库,它要求服务器API接口遵循REST规范。基于注解使得代码变得很简洁,Retrofit默认情况下使用GSON作为JSON解析器,使用OkHttp实现网络请求,三者通常配合使用,这两者也可替换成其他函数库。
七、图片缓存和显示能力
1、BitmapFun:官方的图片加载和缓存示例,入门图片缓存函数库。
2、Picasso:https://github.com/square/picasso
3、Glide:https://github.com/bumptech/glide
4、Fresco:https://github.com/facebook/fresco