第三方框架的使用

开发app之第三方框架的使用

一、简介
gitHub上你会发现有很多带有针对性处理优化的一些开源项目, 比如请求网络优化、 加载网络图片优化
等, 并且这些开源的项目都提供了依赖库可以使第三方app集成使用, 这些就属于第三方框架;
二、框架分类
针对开发app中的不同环节, 我们可以根据自己的需要来使用整套的或者单个第三方框架使用; 下面介绍几种
比较有些名气的第三方框架:
1,XUtils

项目git地址: https://github.com/wyouflf/xUtils
XUtils是一个整套第三方框架; xUtils 包含了很多实用的android工具, 主要四大模块分别为DbUtils模块、
ViewUtils模块、 HttpUtils模块以及BitmapUtils模块;
DbUtils模块:
android中的orm( 依赖注入) 框架, 一行代码就可以进行增删改查;
支持事务, 默认关闭;
可通过注解自定义表名, 列名, 外键, 唯一性约束, NOT NULL约束, CHECK约束等( 需要混
淆的时候请注解表名和列名) ;
支持绑定外键, 保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体, 支持延时加载;
支持链式表达查询, 更直观的查询语义, 参考下面的介绍或sample中的例子。
ViewUtils模块:
android中的ioc框架, 完全注解方式就可以进行UI绑定和事件绑定;
新的事件绑定方式, 使用混淆工具混淆后仍可正常工作;
目前支持常用的11种事件绑定, 参见ViewCommonEventListener类和包
com.lidroid.xutils.view.annotation.event
HttpUtils模块:
支持同步, 异步方式的请求;
支持大文件上传, 上传大文件不会oom
支持GET POST PUT MOVE COPY DELETE HEAD请求;
下载支持301/302重定向, 支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的GET请求支持缓存, 可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oomandroid容器快速滑动时候出现的
图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法, 更好的管理bitmap内存;
可配置线程加载线程数量, 缓存大小, 缓存路径, 加载显示动画等...
但是据反映使用BitmapUtils有时候会出现图片加载不出情况, 或者还是出现小几率的OutofMerry, 只能期
xUtils继续更新优化了;


2,Volley
项目git地址: https://github.com/mcxiaoke/android-volley
Volley2013Google I/O大会上推出了一个新的网络通信框架;Volley可是说是把AsyncHttpClient(
是一个网络封装框架)Universal-Image-Loader(之前特别出名的一个加载网络图片的框架, 下面会介绍)的优
点集于了一身, 既可以像AsyncHttpClient一样非常简单地进行HTTP通信, 也可以像Universal-ImageLoader一样轻松加载网络上的图片; 它的设计目标就是非常适合去进行数据量不大, 但通信频繁的网络操作, 而
对于大数据量的网络操作, 比如说下载文件等, Volley的表现就会非常糟糕。
Volley 的优点:
自动调度网络请求;
高并发网络连接;
通过标准的 HTTP cache coherence( 高速缓存一致性) 缓存磁盘和内存透明的响应;
支持指定请求的优先级;
网络请求cancel机制。 我们可以取消单个请求, 或者指定取消请求队列中的一个区域;
框架容易被定制, 例如, 定制重试或者回退功能;
包含了调试与追踪工具;
请求池, 连接池, Network
Volley 除了支持大数据下载的缺点外, 还有一个就是Volley默认不支持HTTPS, 因此如果使用Volley框架
在使用HTTPS请求的接口必须自己进行证书信任相关处理;
Httpshttp区别:
https相对于http安全, ( 通过证书里面的密钥进行请求加密)
volley框架内也有对加载网络图片进行处理的ImageLoader, NetworkImagerView, setImagUrl("图片
地址");


3,Universal-Image-Loader
项目git地址: https://github.com/nostra13/Android-Universal-Image-Loader
Universal-Image-Loader是之前很多开发者最常用的图片异步加载、 缓存的开源框架之一, 由于其对加载图片
内存优化处理非常好, 所以很多app都可以发现它的影子;
原理图:
ImageLoad的使用: (1),下载git项目或者jar包; (2),AndroidManifest中配置权限;
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> (3),在Application中初始化;
public static void initImageLoader(Context context) {
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY 2);//设置线程池线程数
config.denyCacheImageMultipleSizesInMemory();//清空cache缓存
config.diskCacheFileNameGenerator(newMd5FileNameGenerator());//存储文件名md5加密
config.diskCacheSize(50 1024 1024); // 硬盘最大缓存为50 MiB
config.tasksProcessingOrder(QueueProcessingType.LIFO);//线程为后进先出型
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
} (4),加载网络图片;
ImageLoader imageLoader = ImageLoader.getInstance();
image
Loader.displayImage("http://pic.tuanche.com/ams/20160215/14555012465214662.png",img_test); (5),加载本地图片;
ImageLoader.getInstance().loadImage("本地路径", newSimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
@
Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
});



常用的两种框架介绍(图片处理和网络请求框架)

4,Fresco(也是我们项目中要使用的
项目git地址: https://github.com/facebook/fresco
Frescofacebook推出的一款强大的图片加载的框架; 主要有Image PipelineDrawees两大模块;
Image Pipeline模块:
Fresco 中设计有一个叫做 Image Pipeline 的模块。 它负责从网络, 从本地文件系统, 本地资源加载图
片。 为了最大限度节省空间和CPU时间, 它含有3级缓存设计( 2级内存, 1级磁盘) 。
Drawees模块:
Fresco 中设计有一个叫做 Drawees 模块, 它会在图片加载完成前显示占位图, 加载成功后自动替换为目标
图片。 当图片不再显示在屏幕上时, 它会及时地释放内存和空间占用。
Fresco特性
(1)内存管理
解压后的图片, 即Android中的Bitmap, 占用大量的内存。 大的内存占用势必引发更加频繁的GC。 在5.0以下, GC将会
显著地引发界面卡顿。
5.0以下系统, Fresco将图片放到一个特别的内存区域。 当然, 在图片不显示的时候, 占用的内存会自动被释放。 这
会使得APP更加流畅, 减少因图片内存占用而引发的OOM
(2)图片加载
FrescoImage Pipeline允许你用很多种方式来自定义图片加载过程, 比如:
为同一个图片指定不同的远程路径, 或者使用已经存在本地缓存中的图片
先显示一个低清晰度的图片, 等高清图下载完之后再显示高清图
加载完成回调通知
对于本地图, 如有EXIF缩略图, 在大图加载完成之前, 可先显示缩略图
缩放或者旋转图片
对已下载的图片再次处理
(3)图片绘制
Fresco 的 Drawees 设计, 带来一些有用的特性:
自定义居中焦点
圆角图, 当然圆圈也行
下载失败之后, 点击重现下载
自定义占位图, 自定义overlay, 或者进度条
指定用户按压时的overlay
(4)图片的渐进式呈现
渐进式的JPEG图片格式已经流行数年了, 渐进式图片格式先呈现大致的图片轮廓, 然后随着图片下载的继续, 呈现
逐渐清晰的图片, 这对于移动设备, 尤其是慢网络有极大的利好, 可带来更好的用户体验。
Android 本身的图片库不支持此格式, 但是Fresco支持。 使用时, 和往常一样, 仅仅需要提供一个图片的URI即可, 剩
下的事情, Fresco会处理。
(5)支持gif等动态图加载
Fresco的使用: (1),gitHub下载依赖库或者jar包;Anroid Studio可以通过compile方式加载:
compile 'com.facebook.fresco:fresco:0.8.1' 
(2),添加网络权限;
<uses-permission android:name="android.permission.INTERNET"/> 
(3),在Application中初始化Fresco; Fresco.initialize(this); 
(3),layout布局文件中声明控件;
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image_view"
android:layout_width="300dp"
android:layout_height="300dp"
fresco:placeholderImage="@mipmap/ic_launcher"/> (4),加载网络图片
Uri uri = Uri.parse("http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg");
image_view.setImageURI(uri);
注: 加载本地图片把Url地址改成本地地址即可;
当然上面提到的SimpleDraweeView只是Drawee其中的控件, 没有什么很特别的需求使用它就够了, 下面贴一下它里面的一
些属性:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image_view"
android:layout_width="300dp"
android:layout_height="300dp"
fresco:fadeDuration="300"
fresco:actualImageScaleType="focusCrop"
fresco:placeholderImage="@color/wait_color"
fresco:placeholderImageScaleType="fitCenter"
fresco:failureImage="@drawable/error"
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@drawable/retrying"
fresco:retryImageScaleType="centerCrop"
fresco:progressBarImage="@drawable/progress_bar"
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
fresco:backgroundImage="@color/blue"
fresco:overlayImage="@drawable/watermark"
fresco:pressedStateOverlayImage="@color/red"
fresco:roundAsCircle="false"
fresco:roundedCornerRadius="1dp"
fresco:roundTopLeft="true"
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp"
fresco:roundingBorderColor="@color/border_color"
/>
简单介绍一下上面的属性:
placeholderImage就是所谓的展位图啦, 在图片没有加载出来之前你看到的就是它
failureIamge看到名字就知道是什么了, 图片加载失败时显示的图片就是它了
retryImage图片加载失败时显示, 提示用户点击重新加载, 重复加载4次还是没有加载出来的时候才会显示failureImage的图片
progressBarImage进度条图片
backgroundImage背景图片, 这里的背景图片首先被绘制
overlayImage设置叠加图, 在xml中只能设置一张叠加图片, 如果需要多张图片的话, 需要在java代码中设置哦
pressedStateOverlayImage设置点击状态下的叠加图, 此叠加图不能缩放
ImageScaleType这个就是各种各样的图片缩放样式了, center, centerCrop, 
5,Okhttp(也是我们项目中要使用的
项目git地址: https://github.com/square/okhttp 
其他下载地址:https://github.com/hongyangAndroid/okhttp-utils
Okhttpsquare公司提供的一个高效、 请求快速、 多功能的开源网络框架;
Okhttp支持SPDY协议( SPDY协议在性能上对 HTTP 做了很大的优化) ;
Okhttp主要包含如下:
一般的get请求
一般的post请求
基于Http Post的文件上传( 类似表单)
文件下载/加载图片
上传下载的进度回调
支持取消某个请求
支持自定义Callback
支持HEAD、 DELETE、 PATCH、 PUT(请求方式)
支持session的保持(Session主要维持用户登录状态)
支持自签名网站https的访问, 提供方法设置下证书就行
Okhttp的使用: (1),加载Okhttp依赖库; 
compile 'com.squareup.okhttp3:okhttp:3.4.1' (2),在Application中配置生成OkhttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
// .addInterceptor(new LoggerInterceptor("TAG"))
.connectTimeout(10000L, TimeUnit.MILLISECONDS)
.readTimeout(10000L, TimeUnit.MILLISECONDS)
//其他配置
.build();
OkHttpUtils.initClient(okHttpClient); (3),GET请求
String url "http://www.youkuaiyun.com/";
OkHttpUtils
.get()
.url(url)
.addParams("username""hyman")
.addParams("password""123")
.build()
.execute(new StringCallback()
{
@Override
public void onError(Request request, Exception e)
{ } @
Override
public void onResponse(String response)
{ }
});
POST请求:
OkHttpUtils
.post()
.url(url)
.addParams("username""hyman")
.addParams("password""123")
.build()
.execute(callback);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值