搭建属于自己的技术堆栈

一个完整的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

QQ图片20181017174021.png

QQ图片20181017174103.png

虽然支持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/

QQ图片20181017174440.png

根据综合性能,包的大小以及开源库的可持续发发展的因素,选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

QQ图片20181017175022.png

根据APP对图片显示和缓存的需求从低到高排序:
BitmapFun < Picasso < Android-Universal-Image-Loader < Glide < Fresco

注:如果APP计划使用React Native进行部分模块功能的开发的话,那么在基础函数库选择方面需要考虑和React Native 的依赖库的复用,这样可以减少引入React Native所增加的大小,可复用的函数库有:Okhttp、Fresco等。

故下个框架搭建将会用到:Retroft2网络框架 + Glide图片加载 + Gson数据解析 + Logger开源

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容