background image

Android 开发必备库

手上项目完成后,笔者开始总结开发过程中走的弯路,最大的感触是:你对

Github 了

解越多,你需要做的就越少。在这里推荐一些十分常用的库,希望读者朋友们能少走些弯路。

UniversalImageLoader

      Android SDK 的特点是开放、简单、基础,你可以在上面自由创造,但现成的东西就很少
了,比如刚开始接触

Android 的时笔者惊讶于 ImageView 竟然不能设置来源一张网络图片

甚至

SD 卡上的图片作为来源,对于习惯了前端开发的人这确实难以接收,后来理解到图

片的下载、缓存、解码、错误处理、缩放裁剪这里面每个环节都会有很多种情况,如果单纯地
设置一个

src 属性就将其灵活性局限了,此外 ImageView 毕竟是一个视图类,做一些 I/O、

耗资源的粗活还得自己管理线程也不合适,也就接受了这种

“自己动手丰衣足食”的理念。

      所以在之前的项目开发中真的就自己动手实现了一个叫 RemoteImageDownloader 的类,
其中历经曲折真是不堪回首,既考虑到相同

URL 同时只下载一次、缓存、错误和重试机制,

又要考虑到多个请求时如何管理队列,更痛苦的是还得防止同时解码多个图片、必要时
downsample 以防内存超过限制

……在整个开发过程中不断为其添砖加瓦,直到完善后才发

Github 上有一款叫做 UniversalImageLoader 的库,真是相见恨晚、泪流满面啊,几乎又做

了一个

RemoteImageDownloader,虽然对于项目来说它更符合应用场景,但让项目来适应

这个稳定、专人维护且被众多主流应用使用的库显然是更明智的选择。

参考地址:

https://github.com/nostra13/Android-Universal-Image-Loader

Android Asynchronous Http Client

     如果你开发的项目需要调用 Restful API,那一定离不了异步 HTTP 请求、持久化 Cookie
存储、处理多文件上传、

GZIP 压缩和各种 I/O 错误处理。异步请求通过 AsyncTask 可以解决,

但线程不好管理,所以更常见的是

Thread+Handler 的模式,通过定义不同的 Message 来区

分处理成功请求、连接超时、无法连接到网络、服务器繁忙,在

RequestHeader 中自动加上

GzipHeader , 同 时 给 OutputSteram 自 动 套 上 GzipOutputStream , 根 据 参 数 类 型 去 组 织
Multipart 或普通 POST、用 Preference 去固化存储 Cookie 等等,将它们全部封装在一起,笔
者就打造了一个名为

ApiRequest 类 HTTP 处理类,也是随着项目的进展不断完善添砖加瓦,

包括引入

Activity Based 的概念以便在 finish activity 之后就自动关闭连接等特性。再后来发

生 的 事 情 想 必 大 家 都 知 道 了 : 有 一 天 遇 到 了

Android  Asynchronous  Http  Client , 这 款

Instagram、Pinterest 都在用的库,再一次让我欲哭无泪,因为 ApiRequest 里特性功能,几乎
都能找到。