最美应用-从Android研发project师的角度之[最美时光]
最美应用-从Android研发project师的角度之最美时光
@author ASCE1885的 Github 简书 微博 CSDN
近期发现最美应用这样一个站点。它会定期推介一些非常有意思的app,作为开发人员,每次看到非常棒的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是一个高效的HTTPclient,具有例如以下特性:
- 支持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. 类型安全的RESTclientRetrofit
Retrofit是将REST API转换成Java接口的一个开源函数库。它要求serverAPI接口遵循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. page_id=1670">小米推送(MiPush)
小米推送(MiPush)是小米公司为开发人员提供的消息推送服务。通过在云端和client之间建立一条稳定、可靠的长连接,为开发人员提供向client应用推送实时消息的服务,帮助开发人员有效地拉动用户活跃。
2. 友盟统计分析SDK
友盟统计分析平台是国内最大的移动应用统计分析平台。
我们帮助移动应用开发商统计和分析流量来源、内容使用、用户属性和行为数据,以便开发商利用数据进行产品、运营、推广策略的决策。
3. 友盟用户反馈SDK
友盟用户反馈SDK两行代码实现开发人员和用户轻松高效沟通。收集用户建议,了解用户需求。解决用户问题,全在应用之内。
4. 新浪微博SDK
微博 Android 平台 SDK 为第三方应用提供了简单易用的微博API调用服务,使第三方client无需了解复杂的验证机制就可以进行授权登陆,并提供微博分享功能,可直接通过微博官方client分享微博。
分析与总结
最美时光app用到的底层函数库基本上遵循Android开发人员必知的5个开源库这篇文章介绍的函数库进行搭建。
技术选型中规中矩。都是一些成熟稳定且常见的函数库。避免了开发人员流动造成的代码熟悉成本,团队新成员能够较快上手,并且也避免了开源库隐藏的bug可能造成的版本号delay,由于越是成熟的开源库社区越成熟,bug也越少,就算出现新的bug。也能非常快得到解决。
对于规模较小的团队。我们建议技术选型时尽量选择成熟的框架,特别是对初创公司。当公司和团队发展到一定阶段后。能够适时的引入新技术或者新框架,激活团队成员的技术敏感度。在大公司中,一般存在基础架构组这样一个团队,他们服务于全公司各个产品线。为其提供基础能力建设。当然对于团队成员总体技术水平都非常高的团队来说。就算是初创公司。也有非常多抛弃成熟稳定的技术或框架。转而选择新崛起的技术或者框架。由于往往新技术或框架相比成熟的技术或者框架而言更优。尽管可能存在很多其它的隐藏bug。
说究竟。技术选型是公司规模和团队素养的一个综合选择。
国外开发人员对新技术的接受度和敏感度远高于国内开发人员。这一点是毋庸置疑的,下一篇文章我们将来看看德国出品的一款厨房故事app。能够非常easy看到技术选型上面的差异化。
文末摄影鉴赏
最美应用-从Android研发project师的角度之[最美时光]的更多相关文章
- 阿里巴巴2014研发project师实习生面试经历
java研发project师的初面是在上周三进行的,终于结果到了晚上才出,而没有通过的则是一结束网上就更新了状态.之后阿里通知这周三,也就是今天进行二面. 凑巧的是今早被舍友吵醒,中午那个困啊,但没时 ...
- 如何做更好的Android驱动project师
随着智能手机的飞跃发展,特别是Android智能机的爆炸性发展,Android驱动project师是越来越受欢迎的一个职位,并且是一个非常值得人期待的职位,由于可能你參与研发的一款手机就能改变 ...
- 2014阿里巴巴研发project师暑期实习生面试经验
2014阿里巴巴研发project师暑期实习生面试经验 作者:林子 Blog: http://blog.csdn.net/u013011841 时间:2014年8月 出处:http://blog.c ...
- 网易游戏2015年暑期实习生面试经历-游戏研发project师
首先,我还是先介绍一下网易游戏吧.引用别人的一段话 作者:王选易.出处: http://www.cnblogs.com/neverdie/ 欢迎转载 .也请保留这段声明.假设你喜欢这篇文章,请点[推荐 ...
- 百度2016研发project师笔试题(四)
百度2016研发project师笔试题(四) 2015/12/8 10:42(网上收集整理的,參考答案在后面.若有错误请大神指出) 1. 关于MapReduce的描写叙述错误的是() A. 一个Tas ...
- 网易2016研发project师笔试题
网易2016研发project师笔试题 2015/12/9 11:25(网上收集整理的,參考答案在后面,若有错误请大神指出) 1. 运行指令find / -name "test.c" ...
- Android开发project师,前行路上的14项技能
导读: 你是否曾渴望回到宋朝? 或者什么朝,反正就是男耕女织的古代. 哦,那时的首都在汴梁(开封),房价想必没有如今这么高,工作?无非就是给你把锄头,去,种地去.夕阳西下了,麦子垛后,你和翠姑搂抱在一 ...
- 阿里巴巴2016研发project师笔试题
问题1: 假设下列的公式成立:78+78=123,则採用的是_______进制表示的. 本题实则考察进制转换.能够设为x进制.可是x进制有一个问题.即我们无法对x进制直接进行加减乘除.故转化为我们常见 ...
- 阿里巴巴2014年校园招聘(秋季招聘)在线笔试--測试研发project师
第一部分是单选题:40分钟答题时间. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveG1oMTk1NA==/font/5a6L5L2T/fontsize/ ...
随机推荐
- 汕头市队赛 SRM 08 C
C-3 SRM 08 描述 给一个图,n 个点 m 条双向边,每条边有其长度.n 个点中有 k 个是特殊点,问任意两个特殊点的最短路是多少. 输入格式 第一行三个整数 n m k 第二行 k 个整数 ...
- glance总结
Openstack将glance独立出来的一个原因是尽可能将镜像存储至多种存储上,由glance提供一个完整的适配框架.现在支持亚马逊对象存储S3.openstack自有的swift对象存储,以及常用 ...
- windows实时监测热插拔设备的变化2
//动态监测设备插拔 #include <Dbt.h> BEGIN_MESSAGE_MAP(ParticipateMeeting, CDialogEx) ON_WM_DEVICECHANG ...
- OpenGL ES课程VI之纹理贴图(原文对照)
http://www.educity.cn/wenda/92368.html OpenGL ES教程VI之纹理贴图(原文对照) OpenGL ES Tutorial for Android – Par ...
- Video for Linux Two API Specification revision0.24【转】
转自:http://blog.csdn.net/jmq_0000/article/details/7536805#t136 Video for Linux Two API Specification ...
- 用 gdb 调试 GCC 程序【转】
用 GDB 调试程序 原著:Rick McMullin 用 gdb 调试 GCC 程序 转自:http://blog.csdn.net/bonnshore/article/details/795542 ...
- Linux 根据组来划分账号,根据部门同一账号的组,同一组下拥有同一权限
#新机器添加 #创建部门组与账号 useradd testgroup #创建员工账号加入到部门组里 useradd -g testgroup user1 #员工在/data目录下创建的默认权限为774 ...
- WebBrowser(超文本浏览框)控件默认使用IE9,IE10的方法
C#和易语言都可以使用该方法来变更默认的的IE版本 该文是通过修改注册表的方法实现,测试的时候发现易语言本身也是采用的这种方法 操作方法 打开注册表 HKEY_LOCAL_MACHINE (or HK ...
- Selenium2+python自动化15-select下拉框【转载】
前言最近由于工作原因,更新慢了一点,今天终于抽出一点时间给大家继续更新selenium系列,学习的脚本不能停止,希望小伙伴能多多支持. 本篇以百度设置下拉选项框为案例,详细介绍select下拉框相关的 ...
- BootStrap容器介绍
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...