Android常用第三方框架整理

缓存 DiskLruCache

LRU(Least Recently Used),即近期最少使用算法。

使用缓存策略, 对网络上下载的图片等资源文件进行缓存, 当再次请求同一个资源url时, 首先从缓存中查找是否存在, 当不存在时再从网络上下载。

采用缓存, 除了提高获取资源的速度, 也对减少使用用户手机上的流量有很好的作用. 核心思想是当缓存满时,会优先淘汰那些最少使用的缓存对象。

采用LRU算法的缓存有两种,LruCache用于内存缓存, DiskLruCache用于存储设备缓存, 它通过把对象写入文件系统从而实现缓存的效果。

图片加载

Android-Universal-Image-Loader

  • 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等

  • 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置

  • 支持图片的内存缓存,文件系统缓存或者SD卡缓存

  • 支持图片下载过程的监听

  • 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存

  • 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片

  • 提供在较慢的网络下对图片进行加载

Volley

Android Volley 是Google开发的一个网络lib,可以让你更加简单并且快速的访问网络数据。Volley库的网络请求都是异步的,你不必担心异步处理问题。

Volley的优点:

  • 请求队列和请求优先级
  • 请求Cache和内存管理
  • 扩展性强
  • 可以取消请求

Picasso

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

Picasso不仅实现了图片异步加载的功能,还解决了android中加载图片时需要解决的一些常见问题:

  1. 在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题;

  2. 使用复杂的图片压缩转换来尽可能的减少内存消耗;

  3. 自带内存和硬盘二级缓存功能。

Fresco

Fresco 是 facebook 的开源类库,它支持更有效的加载网络图片以及资源图片。它自带三级缓存功能,让图片显示更高效。

  • Fresco 是一个强大的图片加载组件。

  • Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。

  • Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。

  • Fresco 支持 Android2.3(API level 9) 及其以上系统。

Glide

  • 官方推荐

  • Glide可以加载GIF动态图;

  • Glide和Activity/Fragment的生命周期是一致的;

图片处理

picasso-transformations

一个为Picasso提供多种图片变换的库

glide-transformations

一个为Glide提供多种图片变换的库

android-gpuimage

基于OpenGL的Android过滤器

网络请求

  • 网络请求开源库是一个将网络请求的相关功能封装好的类库,并对外提供Api:

  • 没有网络请求框架之前

App想与服务器进行网络请求交互是一件很痛苦的事:因为Android的主线程不能进行网络请求,还需要另外开一个线程进行请求,然后又要考虑到线程池,缓存等一堆问题。

  • 使用网络请求库后(前人的轮子)

实现网络请求的需求同时不需要考虑异步请求、线程池、缓存等问题,同时还降低开发难度、缩短开发周期、使用方便。

  • Android实现网络请求的主流方法(SDK自带)

    • HttpClient

      优点:相比于HttpURLConnection,更加高效简洁

      缺点:结构过于复杂;维护成本高

      在5.0版本后被Android官方弃用

    • HttpURLConnection

      在Android2.2之前,HttpURLConnection 有个重大 Bug:调用 close() 函数会影响连接池,导致连接复用失效

      在Android2.2之后:HttpURLConnection默认开启了 gzip 压缩&提高了HTTPS 的性能

  • Android主流网络请求开源库

android-async-http

  1. 创建一个AsyncHttpClient;

  2. (可选的)通过RequestParams对象设置请求参数;

  3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类;

  4. 实现AsyncHttpResponseHandler,类库自己也提供了好些现成的response handler,你一般不需要自己创建一个。

volley

适用于数据量不大,但网络通信频繁的操作

ok-http

  • 支持HTTP/2, HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发, 通过在一个连接上一次性发送多个请求来发送或接收数据

  • 如果HTTP/2不可用, 连接池复用技术也可以极大减少延时

  • 支持GZIP, 可以压缩下载体积

  • 响应缓存可以直接避免重复请求

  • 会从很多常用的连接问题中自动恢复

  • 如果您的服务器配置了多个IP地址, 当第一个IP连接失败的时候, OkHttp会自动尝试下一个IP 
    OkHttp还处理了代理服务器问题和SSL握手失败问题

  • 使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果你用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。

retrofit

Retrofit是一个RESTful的HTTP网络请求框架的封装。注意这里并没有说它是网络请求框架,主要原因在于网络请求的工作并不是 Retrofit 来完成的。

Retrofit 2.0 开始内置 OkHttp,前者专注于接口的封装,后者专注于网络请求的高效,二者分工协作。

这里写图片描述

我们的应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作,在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,后者根据用户的需求对结果进行解析的过程。

讲到这里,你就会发现所谓Retrofit,其实就是Retrofitting OkHttp 了。

Retrofit还有一个特性就是支持RxJava。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值