Android基于开源项目搭建自己的技术堆栈

一、app的整体架构

从较高的层次讲,一个APP的整体架构可以分为两层,即应用层和基础框架层。

1、应用层专注于行业领域的实现,如金融、支付、地图、社交等,它直接面向用户,是用户对产品的第一层感知。

2、基础框架层专注于技术领域的实现,提供APP共有的特性,避免重复造轮子,它是用户对产品的第二层感知,例如性能、稳定性等。

一个理想的APP架构,首先应该是支持跨平台开发的;其次应该具有清晰的层次划分,同一层模块间充分解耦,模块内部符合面向对象设计的六大原则;最后应该在功能、性能、稳定性等方面达到综合最优。基于以上的设计原则,可以得到如下APP架构图,最上层是应用层,应用层以下都属于是基础框架层,可以看到基础架构层包括:组件层、基础层和跨平台层。

Android基于开源项目搭建自己的技术堆栈_第1张图片

 二、技术选型

选择开源函数库或者第三方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

你可能感兴趣的:(Android面试,Android开发,android进阶,架构)