最美应用-从Android研发工程师的角度之[厨房故事]

最美应用-从Android研发工程师的角度之厨房故事

@author ASCE1885的 Github 简书 微博 CSDN

本文我们将如约来分析下厨房故事这款德国app的技术堆栈。由于国内和国外网络环境,技术环境的不同,我们将会看到它和最美时光很不一样的东西。我们需要思考的是如果是自己开发一款全新的app时,会如何选择属于自己的技术堆栈呢?

使用的开源函数库

1. 底层库集合Bolts-Android

Bolts是一个由Parse和Facebook设计的面向iOS和Android的底层库集合,最初用于公司内部使用。它主要包含两个特性:

  • Tasks:更好的组织管理复杂的异步代码,类似于JavaScript的Promise。
  • 实现了App Links协议,帮助我们链接到其他app的提供的内容,同时处理接收到的deep-link。

参考文档:

Parse发布Bolts,一个面向iOS和Android的底层库集合

2. 开源日志记录函数库JakeWharton’s Timber

Timber是明星程序员JakeWharton开源的一个日志记录函数库,它基于Android Log类基础上, 提供了简洁可扩展的API。

日志记录行为被抽象为一颗一颗的树??,例如有打印日志到Logcat的树,有打印日志到文件的树等等,如果我们要使用某种类型的树,首选需要创建一个实例,并调用Timber.plant函数将其种植下来,之后就可以随意使用了。

3. 视图注入函数库Butterknife

Butterknife同样是JakeWharton的一个知名作品,基于编译时注解方式实现Android视图属性和方法的绑定,主要特性如下:

  • 在属性上使用@Bind注解代替findViewById
  • 支持多个类似的View组成一个列表或者数组,并一次性实现数组里面所有View的注入
  • 使用@OnClick对函数进行注解,可以替换匿名内部类的使用
  • 在属性上使用资源注解可以替换传统的资源查找方式

参考文档:

官方文档

ButterKnife–View注入框架

4. JSON解析函数库GSON

GSON是Google出品的函数库,可以将JSON字符串反序列化为对应的Java对象,或者反过来将Java对象序列化为对应的JSON字符串。免去了开发者手动通过JSONObject和JSONArray逐个JSON字段进行解析的烦恼,也减少了出错的可能性,增强了代码的质量。

参考文档:

官方的用户指南

第三方的用户指南

5. 现代的I/O操作函数库okio

okio作为java.io和java.nio的补充,是由square公司开发的一个函数库,使得开发者可以更方便的访问,存储和处理数据。一开始是作为okhttp的一个组件存在的,当然我们也可以单独使用它。

6. 现代的HTTP函数库OkHttp

OkHttp是一个高效的HTTP客户端,具有如下特性:

  • 支持HTTP/2和SPDY,对同一台主机的所有请求共享同一个socket
  • 当SPDY不可用时,使用连接池减少请求的延迟
  • 透明的GZIP压缩减少下载的数据大小
  • 缓存响应避免重复的网络请求

OkHttp在网络性能很差的情况下能够很好的工作,它能够避免常见的网络连接问题。如果你的HTTP服务由多个IP地址,OkHttp在第一次连接失败时,会尝试其他可选的地址。这对于IPv4+IPv6以及托管在冗余数据中心的服务来说是必要的。OkHttp使用现代的TLS特性(SNI, ALPN)初始化HTTP连接,但握手失败时,会降级使用TSL1.0尝试初始化连接。

更详细的使用方法参见文档

7. 图片异步加载缓存函数库Android-Universal-Image-Loader

这个函数库简称UIL,是一个功能强大灵活且高度可自定义的用于加载,缓存和显示图片的开源函数库,它提供一系列配置选项,并能很好的控制图片加载和缓存的过程。

主要特性有:

  • 同步或者异步的多线程图片加载
  • 高度可自定义:线程池,下载器,解码器,内存和磁盘缓存,图片显示选项等等
  • 每张图片的显示支持多种自定义选项:默认存根图片,缓存切换,解码选项,Bitmap处理和显示等
  • 图片可缓存在内存或者磁盘(设备的文件系统或者SD卡)上
  • 可实时监听图片加载流程,包括下载进度。

参考文档:

Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)

Android 开源框架Universal-Image-Loader完全解析

Android Universal Image Loader 源码分析

8. 内存泄露检测函数库LeakCanary

LeakCanary是Square公司又一力作,可用于Debug版本中监控Activity,Fragment等的内存泄露,使用这个函数库后,square修复了很多内存泄露问题,甚至发现了Android SDK中的泄露,号称解决了自家产品中94%的oom泄露问题。

参考文档:

LeakCanary:检测所有的内存泄漏

利用 LeakCanary 来检查 Android 内存泄漏

9. 专为移动设备而生的数据库Realm

Realm是一个现代的移动平台数据库,用于替换SQLite和Core Data,它的主要特性有:

  • 移动优先:第一个专为手机,平板和可穿戴设备而生的数据库
  • 使用简单:Realm不是基于SQLite之上的ORM框架,相反,它实现了自己的持久化引擎,专注于简单和速度。
  • 跨平台:Realm支持iOS & OS X(Objective-C & Swift)& Android三个平台,可以跨平台共享Realm文件,在Java,Swift和Objective-C中使用相同的模型类,在所有平台上实现相似的业务逻辑。
  • 快速:归功于零拷贝设计,Realm比ORM框架快很多,通常情况下也快于原生SQLite数据库。
  • 良好的支持:官方在Github,StackOverflow和Twitter上都提供良好的技术支持。

Realm相对于SQLite而言是一个较新的函数库,还在快速发展进化中,喜欢尝试新技术的同学可以试试看,当然机遇和挑战并存,你可能会遇到一些隐藏的bug需要花精力修复,不过一个人想要追求技术的进步就是需要不断挑战自我的。

目前试用Realm的知名产品如下图所示:

参考文档:

Realm数据库基础教程

10. 依赖注入函数库Dagger

Dagger是Square公司开源的一个针对Android和Java的快速依赖注入函数库,是受到Guice的启发创建的。它在编译时实现绑定,并使用反射机制实现图的构成。

Dagger算是一个比较成熟稳定的函数库了,Google维护了一个新分支,习惯上称之为Dagger2,它在Dagger的基础上不断进化,取消了反射的使用,提供了更好的性能,因此,目前来看,如果要使用Dagger作为依赖注入函数库的话,推荐采用Dagger2。

参考文档:

Dagger: 一种Android平台的依赖注入框架

Dagger 源码解析

详解Dagger2

11. EventBus

GreenRobot开发的EventBus是一个专门为Android平台优化过的发布订阅事件总线系统。它简化了Android四大组件之间的通信,使得系统更好的解耦。EventBus的优点是代码简洁,使用简单,并将事件发布与订阅充分解耦。比较有名的另外一个事件总线函数库Square公司是otto

参考文档:

EventBus 源码解析

EventBus使用详解

跟我一起写EventBus

12. Design Support Library

Google I/O 2015为Android开发者带来的一个全新的开发函数库,使得开发者更容易创建符合材料设计的移动应用。

Android的材料设计兼容库(Design Support Library)

使用的第三方SDK

1. 云服务Parse SDK

Parse是一个国外的云服务平台,一年多前被Facebook收购,目前办公地点在美国的加利福尼亚。厨房故事app使用了这家的云服务,因此引入了对应平台的SDK。

2. Crash统计SDK Crashlytics

Crashlytic 成立于2011年,是专门为移动应用开者发提供的保存和分析应用崩溃信息的工具。2013年1月,Crashlytics被Twitter收购,成为又一个成功的创业产品。Crashlytics是功能强大且轻量级的Crash统计SDK,支持Java层和NDK层崩溃统计与分析。

参考文档:

Android下使用Crashlytics

iOS开发工具——统计Crash的工具Crashlytics

3. Facebook SDK

Facebook由于某些众所周知的原因,在国内是几乎用不了的,但这并不妨碍我们进行介绍,有兴趣的话你还可以下载这个SDK下来看下源码,还是有值得学习的地方的。翻不了墙的可以到我的网盘下载。

参考文档:

Android下使用最新FaceBook SDK 3.0

4. Google推送服务GMS

还是由于某些众所周知的原因,国内的app几乎没有使用GMS的,但作为Android开发者还是应该知道它的存在的。

5. amplitude sdk

实时的用户统计分析工具,类似国内的友盟,知道用户使用app的行为,能够帮助产品经理更好的不断改进产品。

分析与总结

最美时光相比,厨房故事虽然在某些开源库的选择上有些重叠(都使用了GSON,OkHttp,okio,UIL,Timber等),但主体上可以看出很大的不同,厨房故事使用的开源函数库更“前卫”一些。无论是全新数据库Realm的使用,Google刚推出不久的Design Support Library的使用,还是LeakCanary的引入,使用RecyclerView代替ListView,抑或是充分利用依赖注入如ButterKnife,dagger来简化代码,都可以看出厨房故事更善于,更有勇气利用新技术来为自身服务。

另一方面,从使用的第三方SDK可以看出国内app和国外app的显著不同之处。当然,每个app的技术堆栈都会千差万别,这取决于团队的梯队建设和成员质量,每一个开源函数库的选择都会是折衷的,不存在哪一个函数库是必选的,总会有替代品,有时选择可能只是一念之差。但我们总是应该不断进步,不断发现或创造新的函数库,并应用到实际产品开发中,使得我们的工作和生活越来越美好,这个是大势所趋。

文末摄影鉴赏

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 16:41:48

最美应用-从Android研发工程师的角度之[厨房故事]的相关文章

最美应用-从Android研发工程师的角度之[最美时光]

最美应用-从Android研发工程师的角度之最美时光 @author ASCE1885的 Github 简书 微博 CSDN 最近发现最美应用这样一个网站,它会定期推介一些很有意思的app,作为开发者,每次看到很棒的app都会从实现角度进行剖析,想着如果是自己将如何实现呢?因此,就有了这个系列的文章,旨在从技术选型和架构的角度解读一些有意思的app. 最美时光是最美应用团队出品的一个纪念日app,用于记录和分享那些重要的日子,我们就先从这个开始吧! 使用的开源函数库 1. 开源日志记录函数库Ja

最美应用-从Android研发project师的角度之[最美时光]

最美应用-从Android研发project师的角度之最美时光 @author ASCE1885的 Github 简书 微博 CSDN 近期发现最美应用这样一个站点.它会定期推介一些非常有意思的app,作为开发人员,每次看到非常棒的app都会从实现角度进行剖析.想着假设是自己将怎样实现呢?因此,就有了这个系列的文章,旨在从技术选型和架构的角度解读一些有意思的app. 最美时光是最美应用团队出品的一个纪念日app,用于记录和分享那些重要的日子,我们就先从这个開始吧! 使用的开源函数库 1. 开源日

帮朋友急招PHP、Android开发工程师 西安 工资8k-12k

PHP高级工程师岗位要求: 1. 有两年以上PHP开发经验, 2. 精通PHP+MySQL程序设计及开发,拥有良好的代码习惯,要求结构清晰,命名规范,逻辑性强,代码冗余率低. 3. 熟悉面向对象的软件设计方法,对面向对象的设计模式有较深的理解并能熟练应用.4. 熟悉常用框架thinkphp或CI或YII其中一种.5. 熟悉webAndroid开发工程师前端HTML[XHTML).JQuery等JS框架.6. 逻辑性强,思维清晰,学习能力强,能够快速的学习新的技能.7. 有高流量网站开发架构经验,

Android开发工程师文集-1 小时学会各种Drawable

前言 大家好,给大家带来Android开发工程师文集-1 小时学会各种Drawable的概述,希望你们喜欢 Drawable介绍 Drawable为抽象类,drawable与view有区别的地方,主要是体现事件和交互性上面. view是面向用户的,是可见的控件,能给它添加点击事件.drawable则相反,不能面向,也不可见,也不能添加点击事件. drawable有好多子类,drawable为抽象类,所以有很多子类来继承它. 主要原理方法 draw() setBounds() BitmapDraw

【内推】2020微软亚太研发集团在北京上海苏州热招300+软硬件研发工程师

2020微软亚太研发集团在北京上海苏州热招300+软硬件研发工程师北京: 1.Azure Global Asia Engineering team-Azure Security-后端开发(1年以上经验) 2.Azure Big Data-Cosmos -(big data)-前后端开发(1年以上) 3.MMX-Edge/Launcher for Mobile-(IOS/Android)- 后端开发(5年以上) 5.MSRA-Business Analyst(北京OR苏州) 5.MSRA-Serv

Android开发工程师,新长征路上的14项技能

导读: 你曾渴望回到宋朝吗? 或者什么朝,反正就是男耕女织的古代. 哦,那时的首都在汴梁(开封),房价想必没有这么高,工作?无非就是给你把锄头,去,种地去.夕阳西下了,麦子垛后,你和翠姑搂抱在一起,那时的你,生活的简单而美好. 看看现在的你,一个刚入门的安卓开发工程师,没有信用卡,没有她,没有24小时热水的家.你想念你的锄头和翠姑(或麦垛),可你回不去了,你现在手中的安卓手机,冰冷如铁,你不知道如何在这4寸屏的小东西上打出一片天地. 你不用感到不知所措和困惑,技术就是你安身立命的根本,当下,你的

Android研发规范

/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm;

Android开发工程师,前行路上的14项技能

导读: 你是否曾渴望回到宋朝? 或者什么朝,反正就是男耕女织的古代. 哦,那时的首都在汴梁(开封),房价想必没有现在这么高,工作?无非就是给你把锄头,去,种地去.夕阳西下了,麦子垛后,你和翠姑搂抱在一起,那时的你,生活的简单而美好. 看看现在的你,一个刚入门的安卓开发工程师,没有信用卡,没有她,没有24小时热水的家.你想念你的锄头和翠姑(或麦垛),可你回不去了.你握在手中的安卓手机,冰冷如铁,你不知道如何在这4寸屏的小东西上创出一片天地. 你不用感到不知所措和困惑,技术就是你安身立命的根本,当下

资深后台研发工程师(转)

资深后台研发工程师 岗位职责: 1.负责搭建平台网络架构及技术架构: 2.把握平台开发方向和技术路线,解决关键技术问题: 3.负责与战略客户.合作伙伴的方案讨论,技术交流以及开发管理: 4.负责参与项目启动.项目计划.项目选型.项目实施.项目验收及项目内部总结等相关工作: 5.参与公司其它技术问题讨论与决策: 6.公司交办的其他事项. 任职要求: 1.5年以上互联网产品研发经验: 2.精通J2EE相关技术,编程基础扎实,熟悉io.多线程.集合等基础框架: 3.熟悉Spring, Spring M