@author ASCE1885的 Github 简书 微博 CSDN 本文由于潜在的商业目的,不开放全文转载许可,谢谢!
由于微信公众号屏蔽外部链接,详情请点击底部 阅读原文
最近发现《最美应用》这样一个网站,它会定期推介一些很有意思的 APP,作为开发者,每次看到很棒的 APP 都会从实现角度进行剖析,想着如果是自己将如何实现呢?因此,就有了这个系列的文章,旨在从技术选型和架构的角度解读一些有意思的 APP。
使用的开源函数库
1. 开源日志记录函数库 JakeWharton's Timber
Timber 是明星程序员 JakeWharton 开源的一个日志记录函数库,它基于 Android Log 类基础上, 提供了简洁可扩展的 API。
日志记录行为被抽象为一颗一颗的树?,例如有打印日志到 Logcat 的树,有打印日志到文件的树等等,如果我们要使用某种类型的树,首选需要创建一个实例,并调用 Timer.plant 函数将其种植下来,之后就可以随意使用了。
2. 轻量级的 ORM 框架 ActiveAndroid
ActiveAndroid 是目前常见的几个 ORM 框架之一(除此之外,比较有名的开源解决方案还有 GreenDAO 和 ORMLite ),可以极大的简化数据库的使用,使用面向对象的方式管理数据库,告别手写 SQL 的历史。每一个数据库表都可以被映射为一个类,开发者只需使用类似 save()
或者 delete()
这样的函数即可。
参考文档: 官方文档
3. JSON 解析函数库 GSON
GSON 是 Google 出品的函数库,可以将 JSON 字符串反序列化为对应的 Java 对象,或者反过来将 Java 对象序列化为对应的 JSON 字符串。免去了开发者手动通过 JSONObject 和 JSONArray 逐个 JSON 字段进行解析的烦恼,也减少了出错的可能性,增强了代码的质量。
参考文档: 官方的用户指南 第三方的用户指南
4. 点击涟漪效果控件 RippleView
这个控件是在 Android 2.3 及以上平台实现的兼容 Android L 平台引入的 View 点击涟漪效果。
5. 现代的 HTTP 函数库 OkHttp
OkHttp 是一个高效的 HTTP 客户端,具有如下特性:
支持 HTTP/2 和 SPDY,对同一台主机的所有请求共享同一个 socket
当 SPDY 不可用时,使用连接池减少请求的延迟
透明的 GZIP 压缩减少下载的数据大小
缓存响应避免重复的网络请求
OkHttp 在网络性能很差的情况下能够很好的工作,它能够避免常见的网络连接问题。如果你的 HTTP 服务有多个 IP 地址,OkHttp 在第一次连接失败时,会尝试其他可选的地址。这对于 IPv4+IPv6 以及托管在冗余数据中心的服务来说是必要的。OkHttp 使用现代的 TLS 特性(SNI, ALPN)初始化 HTTP 连接,但握手失败时,会降级使用 TSL1.0 尝试初始化连接。
更详细的使用方法参见文档。
6. 滚轮选择器控件 android-wheel
android-wheel 是 Android 平台上使用广泛的滚轮选择器,可用于实现日期时间选择器,省市区三级选择菜单等等。在最美时光这个 APP 里面是作为日期时间选择器使用,效果如下所示:
7. 现代的 I/O 操作函数库 okio
okio 作为 java.io 和 java.nio 的补充,是由 square 公司开发的一个函数库,使得开发者可以更方便的访问,存储和处理数据。一开始是作为 okhttp 的一个组件存在的,当然我们也可以单独使用它。
8. 类型安全的 REST 客户端 Retrofit
Retrofit 是将 REST API 转换成 Java 接口的一个开源函数库,它要求服务器 API 接口遵循 REST 规范。它基于注解使得代码变得很简洁,Retrofit 默认情况下使用 GSON 作为 JSON 解析器,使用 OkHttp 实现网络请求,三者通常配合使用,当然我们也可以将这两者替换成其他解析函数库。
参考文档: Retrofit 官方文档 快速 Android 开发系列网络篇之 Retrofit Retrofit – Java(Android) 的REST 接口封装类库 再谈 RESTAPI 最佳实践 使用 Android API 最佳实践 深入剖析 Android 网络开发库-part1: OkHttp, Volley and Gson
9. 下拉刷新组件 Android-PullToRefresh
Android 平台上广泛使用的下拉刷新组件,Github 上 star 五千多,目前不再维护。支持的下拉刷新控件有:
ListView
ExpandableListView
GridView
WebView
ScrollView
HorizontalScrollView
ViewPager
10. 图片异步加载缓存函数库 Android-Universal-Image-Loader
这个函数库简称 UIL,是一个功能强大灵活且高度可自定义的用于加载,缓存和显示图片的开源函数库,它提供一系列配置选项,并能很好的控制图片加载和缓存的过程。
主要特性有:
同步或者异步的多线程图片加载
高度可自定义:线程池,下载器,解码器,内存和磁盘缓存,图片显示选项等等
每张图片的显示支持多种自定义选项:默认存根图片,缓存切换,解码选项,Bitmap 处理和显示等
图片可缓存在内存或者磁盘(设备的文件系统或者 SD 卡)上
可实时监听图片加载流程,包括下载进度。
参考文档: Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置) Android 开源框架Universal-Image-Loader完全解析 Android Universal Image Loader 源码分析
使用的第三方SDK
1. 小米推送(MiPush)
小米推送(MiPush)是小米公司为开发者提供的消息推送服务,通过在云端和客户端之间建立一条稳定、可靠的长连接,为开发者提供向客户端应用推送实时消息的服务,帮助开发者有效地拉动用户活跃。
2. 友盟统计分析 SDK
友盟统计分析平台是国内最大的移动应用统计分析平台。我们帮助移动应用开发商统计和分析流量来源、内容使用、用户属性和行为数据,以便开发商利用数据进行产品、运营、推广策略的决策。
3. 友盟用户反馈 SDK
友盟用户反馈 SDK 两行代码实现开发者和用户轻松高效沟通。收集用户建议,了解用户需求,解决用户问题,全在应用之内。
4. 新浪微博 SDK
微博 Android 平台 SDK 为第三方应用提供了简单易用的微博 API 调用服务,使第三方客户端无需了解复杂的验证机制即可进行授权登陆,并提供微博分享功能,可直接通过微博官方客户端分享微博。
分析与总结
最美时光 APP 用到的底层函数库基本上遵循《Android开发者必知的5个开源库》这篇文章介绍的函数库进行搭建。技术选型中规中矩,都是一些成熟稳定且常见的函数库,避免了开发人员流动造成的代码熟悉成本,团队新成员能够较快上手,而且也避免了开源库隐藏的 bug 可能造成的版本 delay,因为越是成熟的开源库社区越成熟,bug 也越少,就算出现新的 bug,也能很快得到解决。
对于规模较小的团队,我们建议技术选型时尽量选择成熟的框架,特别是对初创公司。当公司和团队发展到一定阶段后,可以适时的引入新技术或者新框架,激活团队成员的技术敏感度。在大公司中,一般存在基础架构组这样一个团队,他们服务于全公司各个产品线,为其提供基础能力建设。当然对于团队成员整体技术水平都很高的团队来说,就算是初创公司,也有很多抛弃成熟稳定的技术或框架,转而选择新崛起的技术或者框架,因为往往新技术或框架相比成熟的技术或者框架而言更优,虽然可能存在更多的隐藏 bug。说到底,技术选型是公司规模和团队素质的一个综合选择。