Android面试一天一题(6)——如何进行技术选型

一般来说,APP的整体结构可以分为两层来看,即应用层和基础层。应用层多用于编写业务相关的内容,不涉及过多的技术选型,我们下面主要对基础层的技术选型加以说明。

在选择第三方库时,我们主要考虑一下几个方面。

  • 功能适合性:提供的功能特性是否完全满足项目的实际需求。

  • 性能:性能如果无法满足项目需求,返工只是迟早的事。

  • 文档完备性:如何使用,如何避免使用中可能遇到的各种坑非常重要。

  • 大小:引入三方库会增加项目的大小,不能太大。

  • 方法数:太快的遇到64K的问题可不是什么好事。

  1. 网络通信

Volley:是Google在2013 I/O大会上发布的用于Android平台的网络通信库,能使网络通信更快、更简单、更健壮。特别适用于数据量小但通信频繁的场景。

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

  • 支持HTTP/2和SPDY,对统一台主机的所有请求共享同一个socket。

  • 当SPDY不可用时,使用连接池减少请求的延迟。

  • 透明的GZIP压缩减少下载数据大小。

  • 缓存相应避免重复的网络请求。

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

Retrofit:确切的说,Retrofit并不是一个完整的网络请求函数库,二是将REST API转换成Java接口的一个开源函数库,它要求服务器API接口遵循REST规范。基于注解使得代码变得很整洁,Retrofit默认情况下使用GSON作为JSON解析器,使用OkHttp实现网络请求,三者通常配合使用,当然我们也可以将这两者替换成其他的函数库。

2.JSON解析

gson:是谷歌出品的JSON解析库,可以将JSON字符串反序列化为对应的java对象,或者反过来讲Java对象序列化为对应的JSON字符串。使用gson解析时,对应的Java实体类无需使用注解进行标记,支持任意复杂Java对象包括没有源代码的对象。

jackson:由于它是针对Java语言通用的JSON函数库,并没有为Android优化定制过,因此其中包含很多非必须的API,相比其他JSON函数库,用于Android平台会显著增大最终生成的APK体积,所以一般不推荐使用。

Fastjson:是阿里巴巴推出的Java语言编写的高性能JSON函数库,号称目前Java语言中最快的JSON库。其接口简单易用,已被广泛使用在缓存序列化、协议交互、Android客户端等多种应用场景。需要注意的是,fastjson存在一个专门为Android定制的版本——fastjson.android。它去除了一些Android虚拟机不支持的功能,使jar更小。

3.数据库

greenDAO:是一个轻量级且快速的ORM框架,专门为Android高度优化和定制,它能偶支持每秒数千条记录的CRUD操作。

ormlite:是Java平台的一个ORM框架,支持JDBC链接、Spring和Android平台。由于它目前已经不是一个活跃的开源库,所以不推荐使用。

realm:是一个全新的移动数据库引擎,不基于SQLite,它拥有自己的数据库存储引擎,并实现了高效快速的数据库构建操作。相比SQLite和ORM框架,Realm操作要快很多。这里推荐大家使用,理由如下:

  • 跨平台:使用Realm,Android和iOS开发者无需考虑内部数据的架构,调用Realm提供的API即可轻松完成数据交换,两个平台无缝衔接。

  • 超简单的使用:相比SQLite所需的人们知识,Realm几乎是傻瓜级的,可以极大降低开发者的学习成本,快速实现数据库存储功能。

  • 可视化操作:Realm为开发者提供了一个轻量级的数据库可视化操作工具,开发者可以轻松查看数据库中的内容,并实现简单的插入和删除等操作。

4.日志收集

最常见的开源日志库当属Logger了,它是在对系统Log类封装的基础上实现的,同时增加不少新特性。比如,在Logcat中的格式化输出,可以非常容易地与其他APP的日志相区分;包含线程、类、方法信息;支持跳转到源码处;支持格式化输出JSON、XML。

当然,Logger也存在缺陷——第一,不支持List、Set、Map和数组等常见Java集合类的格式化输出;第二,不支持将日志保存到磁盘。为了克服第一个缺陷,可以结合LogUtils开源库使用,而第二个缺陷可以通过timber开源库弥补。

5.图片缓存

Picasso:是著名的Square公司众多开源项目之一,它除了实现图片的下载和二级缓存功能,还解决了常见的一些问题。

  • 在adapter中正常的处理ImageView回收和下载的取消。

  • 使用尽量小的内存实现复杂的图像变换。

Glide:是Google推荐的用于Android平台上的图片加载和缓存函数库。这个库被广泛应用在Google的开源项目中,Glide和Picasso有90%的相似度,知识在细节上还存在不少区别。Glide为包含图片的滚动列表做了尽可能流畅的优化。除了静态图片,Glide还支持GIF图片的显示。Glide提供了灵活的API可以让开发者方便的替换下载图片所用的网络函数库,默认情况下,它使用HttpURLConnection作为网络请求模块,开发者可根据实际需求灵活使用Volley或OkHttp等函数库进行替换。

Fresco:是Facebook开源的功能强大的图片加载和缓存函数库,相比其他图片缓存库,Fresco最显著的特点是具有三级缓存:两级内存缓存和一级存盘缓存。它的主要特性如下。

  • 渐进式的加载JPEG图片。

  • 显示GIF和WebP图片。

  • 可扩展,可自定义的图片加载和显示。

  • 在Android4.x和一下的系统上,将图片放在Android内存一个特殊的区域,从而使得应用运行更流畅,同时极大减低出现内存溢出的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值