Android 各种开源项目记录比较

App 的整体架构

App 结构,应具有清晰的层次划分、同一层模块间充分解耦、模块内部符合面向对象设计六大原则。
App 的整体架构整体分为:

  • 应用层:直接面向对象,如:支付,地图,社交等。
  • 基础框架层:组件层(二维码、推送、手势、事件总线等)、基础层(网络通信、数据库、JSON解析等)、跨平台层(日期、日志、线程等)。

选择开源框架

  • 特性:是否满足项目的需求;
  • 可用性:是否提供简洁的API;
  • 性能:性能不能太差;
  • 文档:是否比较齐全,且可读性强;
  • 技术支持:遇到问题是否能及时得到官方技术支持;
  • 大小:会影响到Apk的大小;

日志

  • Logger:对系统 Log 类的封装。支持跳转到源码处,支持格式化输出 Json、Xml。不支持集合类格式输出。只支持输出日志到 Logcat (Android 中的一个命令行工具,可以用于得到程序的Log信息)。
  • LogUtils:支持集合类格式的输出。 (https://github.com/pengwei1024/LogUtils
  • timber:可扩展的框架,支持不同类型的日志记录,如:Logcat、文件、 网络等 (https://github.com/jakeWharton/timber

Json 解析

  • Gson(232k):出自Google,可以将Json字符串反序列化为对应的 Java 对象,或者反过来将Java 对象序列化为对应的Json字符串。(https://github.com/google/gson
  • Jackson(1.5M):包括(core:Json 流处理核心库;databind:数据绑定函数库,实现对象与json的相互转换;annotations:databind使用的注解函数库)。由于包含很多非必要的API,会加大Apk的Size。(https://github.com/FasterXML/jacksonhttps://github.com/FasterXML/jackson-core
  • Fastjson(417k):出自阿里巴巴,号称目前Java语言中最快的 Json 库。由于是Java 通用的,对于Android来说就多了许多冗余代码,专门的Android版(fastjson.android(256k)),去掉了一些Android虚拟机dalvik不支持的功能,减小 jar包大小。
  • LoganSquare(307k):其底层基于jackson 的 streaming API ,使用 APT(Android Annotation Tool)实现编译时注解。从而提高Json解析和序列化的性能。
  • 注:从大小和性能上考虑,fastjson.android 适合作为 json 解析和序列化。

数据库

  • ActiveAndroid:极大的简化数据库的使用,使用面相对象的方式管理数据库。每一个数据库表都可以被映射为一个类,开发者只需要使用类似 save、delete等函数操作数据库。目前处于维护阶段,最新一版是在2012年发布的。(https://github,.com/pardom/ActiveAndroid
  • ormlite:包括两部分(core-核心模块,无论哪个平台都要基于这个核心库;android-针对Android 平台的适配模块)。目前处于维护阶段,最新一版在2013年发布。(https://github.com/j256
  • greenDAO:一个轻量级且快速的ORM框架,主要针对Android高度优化和定制,性能优于前两个。(https://github.com/greenrobot/greenDAO
  • Realm:是一个全新的移动数据库引擎,既不是基于 ios 的 Core Data,也不是基于SQLite。快速高效的实现数据操作。有点:跨平台、用法简单、可视化操作(Realm 提供了一个轻量级的可视化工具。缺点:jar包有点大,主要原因是 so 库较多,用的时候可以只使用 armeabi-v7a 和 x86两个平台)(https://realm.io/

网络通信

  • Android-async-http(1.2M):最经典的网络异步通信函数库,如今由于比较大,而不太常用(https://github.com/loopj/android-async-httphttps://hc.apache.arg/httpcomponents-client-ga/)。
  • OkHttp(392k):支持HTTP/2 和 SPDY,对同一台主机的所有请求共享同一个socket;当 SPDY 不可用时,使用连接池减少请求的延迟;透明的GZIP压缩减少下载数据大小;缓存响应避免重复的网络请求。OkHttp 依赖于 okio(可以更方便的访问、存储和处理数据)。(https://github.com/square/okhttp
  • Volley(94k):Volley 特别适用于数据量小等通信频繁的场景。在Android 2.2 之前 Volley 底层使用 Apache HttpClient,在 Android 2.3 之后 其底层使用 HttpURLConnection 发送网络请求。而且开发者很容易将网络栈切换到OkHttp。(https://android.googlesource.com/platform/frameworks/volley;https://github.com/mcxiaoke/android-volley).
  • Retrofit(333k):确切的说,Retrofit 并不是一个完整的网络请求函数库,而是将 REST API 转换成 Java 接口的一个开源库,它要求服务器 API 接口遵循 REST 规范。基于注解使得代码变得更加简洁。Retrofit 默认情况下使用 GSON 作为 Json 解析器,使用 Okhttp 实现网络请求,通常三者配合使用。

图片缓存和显示

  • BItmapFun(71k):一个入门图片缓存,以前用的多些,如今越来越多的强大的框架出现,现在不再使用。(https://developer.android.com/training/displaying-bitmaps/index.html)。
  • Picasso(120k):除了实现图片的下载和二级缓存,还解决了一些问题,如在Adapter中正常的处理Image View回收和下载的取消;使用尽量小的内存实现复杂的图片变换(https://github.com/square/picaso)。
  • Glide(475k):和 Picaso 很相似,除了静态图片,Glide 也支持 Gif 格式图片的显示。默认使用 HttpUrlConnection 作为网络请求。可以根据实际需要选用网络库(Https://github.com/bumptech/glide)。
  • Fresco(3.4M):最显著的特点是具有三级缓存,其他还有渐进式的加载 JPEG 图片;显示 GIF 和 WebP 动画;可扩展,可自定义的图片加载和显示;在 Android 4.x和 以下版本,将图片放在 内存一个特殊环境,从而使得应用更加流畅,极大的减少了 OOM 错误。(https://github.com/facebook/fresco
    Android-Universal-Image-Loader(162k):同步或异步的多线程图片加载;高度可自定义;支持二级缓存(https://github.com/nostral3/Android-Universal-Image-Loader
  • 注:根据图片显示和缓存的需求从低到高
    BItmapFun < Picasso < Android-Universal-Image-Loader < Glide < Fresco
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容