Xutils使用详解
刚开始的时候,在 GitHub 上面出现了一款强大的开源框架叫 xUtils,里面包含了很多实用的android工具,并且支持大文件上传,更全面的 http 请求协议支持(10种谓词),拥有更加灵活的 ORM,更多的事件注解支持且不受混淆影响,该框架最低兼容版本为 android 2.2 (api level 8)。但是随着 Android 版本的不断更新,特别是 Android 6.0 之后,xUtils 的兼容不是很好,因此就出现了升级版的 xUtils,也就是 xUtils3。
xUtils3 详细介绍
xUtils3 是 xUtils 的升级版本,包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 最主要是特性强大, 方便扩展,当然对比之前的 xUtils,在 xUtils3 中很多的 API 接口都已经改变了,使用方法也和之前不同了,所以本文主要是讲解最新的 xUtils3 的详细介绍以及该框架下的 ViewUtils 模块的最新用法。
1. xUtils3 的特性
1.1 xUtils3 的主要特性
xUtils3 的主要特性如下。
- 1.稳定的基石: AbsTask 和统一的回调接口 Callback, 任何异常, 即使你的回调方法实现有异常都会进入 onError,任何情况下 onFinished 总会让你知道任务结束了。
 - 2.基于高效稳定的 orm 工具,http 模块得以更方便的实现 cookie (支持 domain、 path、 expiry 等特性)和 缓存(支持 Cache-Control、Last-Modified、 ETag 等特性)的支持。
 - 3.有了强大的 http 及其下载缓存的支持,image 模块的实现相当的简洁,并且支持回收被 view 持有,但被 Mem Cache 移除的图片,减少页面回退时的闪烁。
 - 4.View 注解模块仅仅400多行代码却灵活的支持了各种 View 注入和事件绑定, 包括拥有多了方法的 listener 的支持。
 
1.2 其他特性
xUtils3 的一些其他特性。
- 1.支持超大文件(超过 2G )上传。
 - 2.更全面的 http 请求协议支持(11种谓词),在 xUtils 中只支持10种谓词。
 - 3.拥有更加灵活的 ORM, 和 greenDao 一致的性能。
 - 4.更多的事件注解支持且不受混淆影响。
 - 5.图片绑定支持 gif (受系统兼容性影响, 部分 gif 文件只能静态显示)、webp,支持圆角,圆形, 方形等裁剪,支持自动旋转。
 - 6.从 3.5.0 开始不再包含 libwebpbackport.so,需要在 Android4.2 以下设备兼容 webp 的请使用 3.4.0 版本。
 
2. xUtils3 主要四大模块
xUtils 中目前包括了主要的四大模块,分别为 DbUtils 模块、ViewUtils 模块、HttpUtils 模块以及 BitmapUtils 模块,下面对这四大模块进行介绍。
2.1 DbUtils 模块
- 1.Android 中的 orm 框架,一行代码就可以进行增删改查。
 - 2.支持事务,默认关闭。
 - 3.可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK 约束等(需要混淆的时候请注解表名和列名)。
 - 4.支持绑定外键,保存实体时外键关联实体自动保存或更新。
 - 5.自动加载外键关联实体,支持延时加载。
 - 6.支持链式表达查询,更直观的查询语义。
 
2.2 ViewUtils 模块
- 1.android 中的 ioc 框架,完全注解方式就可以进行 UI,资源和事件绑定。
 - 2.新的事件绑定方式,使用混淆工具混淆后仍可正常工作。
 - 3.目前支持常用的20种事件绑定,比如 setClickListener 等。
 
2.3 HttpUtils 模块
- 1.支持同步,异步方式的请求。
 - 2.支持大文件上传,上传大文件不会出现 oom 内存溢出情况。
 - 3.支持 GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT 的请求。
 - 4.下载支持301/302重定向,支持设置是否根据 Content-Disposition 重命名下载的文件。
 - 5.返回文本内容的请求(默认只启用了 GET 请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
 
2.4 BitmapUtils 模块
- 1.加载 Bitmap 的时候无需考虑 Bitmap 加载过程中出现的 oom 和 android 容器快速滑动时候出现的图片错位等现象。
 - 2.支持加载网络图片和本地图片。
 - 3.内存管理使用 lru 算法,更好的管理 Bitmap 内存。
 - 4.可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。
 
xUtils3 中 ViewUtils 的主要作用
ViewUtils 的主要作用有两点,一是可以完全注解方式就可以进行 UI 绑定和事件绑定,另外一个就是无需 findViewById 和 setOnClickListener 等。而其中的 UI 绑定和事件绑定下面详细介绍。
1. UI 绑定
UI 绑定简而言之就是针对于控件和 View 了,分为多种绑定方法。
@ContentView(R.layout.view_acti); //setContentView 注解在activity的声明上方
@ViewInject(R.id.lv_test); //反射view  注解在一个view声明上
2. 事件绑定
事件绑定就是指监听事件的注解,比如 setOnClickListener 等。
@Event(R.id.button) //将一个自定义的方法绑定到一个 view 的事件上
至于具体的使用方法就在下面了。
xUtils3 中 ViewUtils 的使用方法
xUtils3 框架中包含了很多的工具,主要的四大模块功能也很强大,这次主要是要讲解其中的 ViewUtils 模块的使用。
1. Gradle 添加依赖
在 module 下的 build.gradle 文件下面添加对 xUtils3 的依赖。
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.1'
    testCompile 'junit:junit:4.12'
    compile 'org.xutils:xutils:3.5.0'
}
2. ViewUtils 初始化
在 Activity 和 Fragment 中初始化 ViewUtils 模块略有不同,所以就分开介绍了。
2.1 Activity 中初始化
在 Activity 中初始化比较简单,直接在 onCreate 中一行代码就搞定了。
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        x.view().inject(this);
    }
2.2 Fragment 中初始化
Fragment 的生命周期依赖于 Activity,另外在 Fragment 中一些方法也与 Activity 不同,所以 ViewUtils 的初始化方法也不太一样了。
private boolean injected = false;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        injected = true;
        return x.view().inject(this, inflater, container);
    }
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (!injected) {
            x.view().inject(this, this.getView());
        }
    }
其中 injected 是用来标识是否已经注入了 View ,如果还没有注入,在 onViewCreated 中要写入注入 View 的方法。
3. ViewUtils 绑定控件
一般在 Activity 或者 Fragment 中声明控件,都要使用方法 findViewById,如果控件一旦多了,就会很麻烦,代码要写不少,但是使用 ViewUtils 可以通过注解的方式直接进行 UI 绑定,方法也很简单。
@ViewInject(R.id.textView)
private TextView textView;
4. ViewUtils 绑定布局
在为 Activity 或者 Fragment 添加布局时,我们都会使用到 setContentView(int layoutRes) 方法,在 ViewUtils 添加了直接注解布局的方法,如下。
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
   .....
}
在 Fragment 中注解方法是一样的,在 Fragment 中直接添加就好。
5. ViewUtils 绑定事件
在之前的按钮的点击事件、列表选项的 item 点击事件等,写起来代码都比较多些,而使用 ViewUtils 都可以变得简单起来,先来看下按钮的点击事件的绑定。
// 取消了之前使用方法名绑定事件的方式,使用id绑定不受混淆影响
// 支持绑定多个id @Event({R.id.id1, R.id.id2, R.id.id3})
// or @Event(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})
// 更多事件支持参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
@Event(R.id.test_button)
public void testButtonClick(View v) { // 方法签名必须和接口中的要求一致
    ...
}
上面是按钮的点击事件的绑定,很方便,再来看看列表选项的 item 点击事件的绑定。
//选项的点击事件 OnItemClickListener
@Event(value = R.id.lv_img, type = AdapterView.OnItemClickListener.class)
    private void onImageItemClick(AdapterView<?> parent, View view, int position, long id) {
        ....
    }
ViewUtils 所支持的事件的绑定还有很多种,这里就主要介绍上面两种,更多的使用方法请参考 xUtils3 源码。
结束语
xUtils3 在 xUtils 的基础上优化了不少,ViewUtils 注解也更为的简单明了,有了 ViewUtils,我们就不用像之前一样不断的对控件进行声明,另外对于事件的处理也简化了不少,在后期的商城项目实战中,都将使用 ViewUtils 来做 UI 的绑定以及事件的绑定。
作者:菜鸟窝
链接:http://www.jianshu.com/p/9d8aeb35e36e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Xutils使用详解的更多相关文章
- Android图片缓存之Bitmap详解
		
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
 - Linq之旅:Linq入门详解(Linq to Objects)
		
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
 - 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
		
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
 - EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
		
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
 - Java 字符串格式化详解
		
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
 - Android Notification 详解(一)——基本操作
		
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
 - Android Notification 详解——基本操作
		
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
 - Git初探--笔记整理和Git命令详解
		
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
 - Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
		
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
 
随机推荐
- [剑指Offer] 47.求1+2+3+...+n
			
题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). [思路]用&&的短路思想来求和 ...
 - iOS-开发中的时间处理
			
做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是一行API调用,获取当前系统时间这么简单.我们需要了解与时间相关的各种API之间的差别,再因场景而异去设计相应的机制. 时间的形式 ...
 - 详解 ES6 Modules
			
详解 ES6 Modules 对于新人朋友来说,想要自己去搞定一个ES6开发环境并不是一件容易的事情,因为构建工具的学习本身又是一个非常大的方向,我们需要花费不少的时间才能掌握它. 好在慢慢的开始有大 ...
 - [HZOI2016]偏序&[HZOI2015]偏序II K维偏序问题
			
description Cogs: [HZOI2016]偏序 [HZOI2015]偏序 II data range \[ n\le 5\times 10^4\] solution 嵌套\(CDQ\)的 ...
 - [洛谷P4168][Violet]蒲公英
			
题目大意:有$n(n\leqslant4\times10^4)$个数,$m(m\leqslant5\times10^4)$个询问,每次问区间$[l,r]$内的众数,若相同输出最小的,强制在线. 题解: ...
 - BZOJ1834 [ZJOI2010]network 网络扩容   【最大流,费用流】
			
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 3394 Solved: 1774 [Subm ...
 - [CodeVs1227]方格取数2(最大费用最大流)
			
网络流24题的坑还没填完,真的要TJ? 题目大意:一个n*n的矩阵,每格有点权,从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变成0,这样一共走 ...
 - luoguP1357 花园
			
矩阵乘法优化dp 注意环形处理: 发现,对于一个初始状态s的方案数,就是填n次后,再回到自己的状态.期间都是合法的话,那么一定这个方案就合法. 和开始状态有关.所以先把状态转移矩阵的(n-m)乘出来. ...
 - Vue.js中的常用的指令缩写
			
Vue.js为两个最为常用的指令提供了特别的缩写: v-bind缩写 <!--完整语法--> <a v-bind:href="url">测试</a&g ...
 - ACE反应器(Reactor)模式(3)
			
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/595938.html 在服务器端使用Reactor框架 使用Reactor框架的服务器端 ...