ZUI易入门Android之开源框架的使用
前言:
为了扩展大家的知识面,工作后对当前流行的一些开源框架有所了解,今天我们会给大家介绍一系列的第三方框架的使用方法。这些框架有的能简化我们的代码,比如那些繁冗的findviewbyid操作,有的把我们访问网络的操作进行了封装,有的可以高效地帮助我们实现图片下载和显示的功能,有效避免OOM,有的能高效地处理数据库的增删改查操作,等等。总之,掌握当前流行的第三方框架的使用方法能够有效提高我们的开发效率,下面我们就来对这些框架一一讲解。
-
- 依赖注入概念
B: 框架的使用目的之一就是简化代码、降低耦合性。在接触开源框架之前,首先了解一个概念——依赖注入。
E: 如果ClassA中用到了ClassB的实例,我们称A依赖于B,因为要有B的实例,A才能运行起来。如果在A中直接初始化B,称为硬初始化。硬初始化的弊端是,如果B的构造方法或者创建实例的方式发生改变,A中所有初始化B的地方都要做修改,程序耦合性很高。依赖注入是通过注解的方式,把一个类所依赖的对象实例赋值到所持有的引用中,而对象的实例化过程从调用者转移到相关的容器控制程序中(第三方框架)。
-
- 依赖注入Butterknife
B: 了解了依赖注入的概念后,我们首先看一个与依赖注入相关的开源框架——ButterKnife。平时我们创建完布局文件后,在Activity中要进行大量的findViewById的操作,十分繁琐,而ButterKnife能够把大家从繁冗的findViewById的操作中解脱出来。
E: ButterKnife底层使用了反射的机制,会从遍历Activity的变量和方法,判断变量和方法上面是否有自己定义的注解,例:如果有@Bind这个注解,会把@Bind注解中的Id参数对应的控件通过findViewById找到,赋值给对应的成员变量。(ButterKnife底层也是用findViewById实现的)。有了ButterKnife,我们再也不用为findViewById而烦恼了!
-
- 依赖注入AndroidAnnotations
B: ButterKnife只能实现一些控(TextVeiw)件和事件(onClick)的注入。下面我们介绍一个比ButterKnife更牛逼的框架AndroidAnnotations。这个框架不仅能实现ButterKnife的功能,还能实现Extra数据、资源、系统服务等等的依赖注入,简化线程模型和网络请求。
E: 我们总结一下使用AndroidAnnotations的步骤:
- 配置build.gradle文件
- 在Activity上增加注解@EActivity
- 修改清单文件中的Activity名称(最后加“_”)
- 定义注解并使用
-
- 依赖注入 Dagger2
B: ButterKnife和AndroidAnnotation都能对Android原生的控件或者事件进行注入,如果我们要对自己定义的一个类,比如User进行依赖注入,就不奏效了;这时我们要引入另一个更高级的开源框架Dagger2.
E: Dagger2可以让我们开发者注入一个自定义的对象。现在回顾一**入的步骤:
- 配置gradle文件
- 创建Moduel类,类中包含provides方法
- 创建Component接口,指定Moduel类和自定义对象要注入的地方
- 声明自定义对象@inject User user; 并注入:MainActivityComponent component = DaggerMainActivityComponent.builder().mainActivityModuel(new MainActivityModuel()).build(); component.inject(this);
-
- 网络Volley
B: 接下来给大家介绍一个网络请求相关的框架Volley,Volley是Google推荐的网络请求框架,它适用于数据量小,请求比较频繁的情况。现在我们看一下Volley的具体使用方法。
E: 我们总结一下Volley的使用步骤:
- 创建一个请求队列RequestQueue
- 创建Request请求
- 把请求加入到请求队列中
一般在使用Volley的时候,我们会对它进行简单的封装,比如我们Demo中用到的VolleyFactory。
-
- 网络OkHttp
B: Volley只在数据量传输较小的网络请求情况下适用,如果网络请求数据量比较大,比如文件的传输、图片的下载等等,Volley就不好使了。为了解决这个问题,我们引入另一个网络框架——OkHttp。OkHttp的使用方法和Volley类似,只是在请求成功或者失败的回调中,依然是子线程,而没有转到UI线程中。我们看一下具体的用法。
E: OkHttp的使用步骤:
- 创建OkHttpClient对象
- 创建Request对象
- 添加请求对象Request到OkHttpClient对象中,并执行请求。
由于OkHttp请求成功或者失败的回调方法依然是在子线程中,我们要想在请求结束后更新UI,就要使用Handler机制转到UI线程去做相应的操作。这给我们开发造成了麻烦,所以一般我们使用OkHttp都是直接使用OkHttpUtils,它对OkHttp进行了简单的包装,使用它进行网络请求,失败或者接受后,自动回到主线程,我们可以直接更新UI。
-
- 网络Retrofit
B: 无论Volley还是OkHttp,在网络请求的时候,一般都不会对返回结果进行处理,只是原样输出。而如果数据传输格式为json,能不能直接把请求的数据转换为我们封装好的bean对象呢?Retrofit就能实现这种需求。
E: 总结一下Retrofit的使用步骤:
- 在线创建数据模型
- 创建REST接口
- 创建Retrofit对象并发起请求
-
- 图像_UIL
B: 接下来我们认识和图像下载相关的第三方框架,说道图像下载,最经典的就是Universal_Image_Loader了,我们来看一下如何使用它。
E: 我们总结一下UniversalImageLoader的使用步骤:
- 配置联网和写入SD卡的权限
- 初始化配置
- 显示图片
DisplayImageOptions中定义了图片的各种显示方法,大家可以到官网查看。
-
- 图像_Fresco
B: 如果说UniversalImageLoader是一个加载图片比较强大的框架,Fresco比UniversalImageLoader的功能更强大,不仅能加载普通图片,可以轻松通过布局文件中的属性设置图片的圆角等特性,还可以加载GIF图片和渐进式JPEG图片。我们来看一下它的用法。
E: Fresco的用法比较简单,在布局文件中使用SimpleDraweeView代替普通ImageView,在代码中初始化(一定要在setContentView之前调用),并设置URI即可view.setImageURI(uri);借助DraweeController还可以显示GIF图片或者渐进式JPEG图片。
-
- 图像_Picasso_Glide
B: 接下来我们再介绍两个图像开源库,Picasso和Glide,之所以把两个放在一起介绍,是因为两者的使用方法或者API基本一样。
E: Picasso和Glide的使用非常简单。直接调用Picasso/Glide.with(context).load(uri).into(imageView)即可,如果想显示圆形图片或者圆角图片,创建一个BitmapTransformation的子类,调用transfrom方法即可。介绍了这几个图片的加载库,下面我们来比较一下他们的特点,分析一下在什么时候用什么库:
- 加载图片速度最快的是Glide
- 加载图片质量最好的是Picasso
- 如果应用加载的图片很多,推荐使用Fresco > Glide > Picasso
-
- 数据库_ormlite
B: 平时开发中,用数据库存储数据的情况很多,如果用原生DataBaseOpenHelper的方式操作数据库,效率比较低,而且代码量比较多。所以在实际开发中,操作数据,我们一般也是要借助第三方的框架。首先介绍ormlite框架。
E: OrmLite是采用注解的方式把我们定义的JavaBean对象的各个字段对应到数据库表的字段上。使用OrmLite的步骤如下:
- 配置gradle
- 定义表示数据库表结构的实体类对象
- 创建OrmLiteSqliteOpenHelper的实现类
- 生成DAO对象
- 用DAO对象对数据库进行增删改查的操作。
-
- 数据库_GreenDao
B: GreenDao也是一款操作数据库的框架,它的优点就是快,操作数据库的速度远远超过Ormlite和原生数据库操作方式。我们来学习一下GreenDao如何使用。
E: GreenDao可以通过DaoGenerator为我们自动生成Dao和数据库表结构JavaBean的代码。通过DaoMaster.DevOpenHelper初始化数据库,并获取dao对象,只要得到了dao对象,就可以对数据库进行增删改查操作了。
-
- 响应式函数编程1
B: 接下来我们介绍一个新的概念,响应式编程。它能够在程序逻辑异常复杂的情况下,使代码逻辑保持简介。我们来学习一下响应式编程到底是什么。
E: 响应式编程是基于事件的。以事件的角度出发,分为观察者、被观察者,通过订阅的方式把观察者注册给被观察者,监听事件的触发。
-
- 响应式函数编程2
B: 响应式函数编程是一种新的编程思路,我们学习一下这种编程思路下,如何使用Retrofit框架。
E:我们总结一下响应式编程下Retrofit的使用步骤:
- 添加依赖
- 创建数据模型
- 创建REST接口
- 创建Retrofit对象并发起请求。
6.1 第三方分享_Mob
B: 现在的APP一般都带有分享功能,能够让用户通过各个渠道分享APP中有价值的信息。现在主流的分享渠道包括QQ、微博、微信、朋友圈、短信等等。如果我们自己来做这些渠道的分享,是件既费时又费力的工作,因此在做分享功能的时候,我们也可以借助第三方的SDK。今天我们就介绍一下ShareSdk的使用方法。
E: 我们总结一下ShareSdk的集成步骤:
- 在Mob网站上注册APP,获取APPkey
- 下载SDK包
- 利用工具QuickIntegrater.jar生成相关资源文件,拷贝到工程中的相关文件夹中。
- 配置权限
- 按要求更改清单文件(添加Activity信息)
- 更改assets/ShareSDK的配置信息(如果不配置,会分享失败)
- 利用OneKeyShare进行分享。
市面上有很多第三方分享的SDK,除了我们介绍的ShareSdk,还有友盟的分享等等。这些SDK使用的宗旨只有一个:按照集成文档一步步的做。而实际上,他们的集成步骤是大同小异的。
-
- 数据统计_百度统计
B: APK包上传到各个应用市场运营后,往往需要我们进APP的运行情况进行追踪,比如:运行过程中出现过哪些崩溃的bug,用户进入到某个页面的概率是多大,在这个页面停留多长时间,等等。为了满足这种需求,需要我们的APP在上线之前集成统计SDK,第三方统计SDK也比较多,比如百度统计、友盟统计等等。今天我们就来介绍一下百度统计的使用方法。
E: 学习了百度统计,同样我们来回顾一下集成百度统计SDK的步骤:
- 注册并获取appkey(和ShareSdk是不是类似?)
- 按照集成文档修改清单文件(添加权限、增加meta-data)
- 在所有页面(Activity 、 Fragment)的onResume() 和 onPause()方法中添加StatService.onResume(Context context) 和StatService.onPause (Context context)方法。
8.1 消息推送_个推
B: 现在消息推送在APP中越来越普遍了。即时聊天、消息通知这些功能基本上都是使用的消息推送,和分享、统计类似,这些工作也已经有第三方的SDK帮我们实现了,我们只需要集成SDK即可。今天我们就来介绍一下个推这个推送SDK。
E: 我们来总结一下个推SDK的集成步骤:
- 注册APP,并获取APPid和Appkey
- 下载SDK包
- 将GetuiExt.jar和GetuiSDK.jar拷贝到项目中的libs,并添加到依赖
- 在jniLibs文件夹中添加so库
- 拷贝资源文件
- 修改清单文件(添加权限、meta-data、配置Activity和服务)
- 初始化SDK 。PushManager.getInstance().initialize( this.getApplicationContext() );
9.1 Bug追踪_Bugly
B: 当APP上线后,如果我们想对APP的bug进行追踪,那么就可以继承一些第三方的SDK替我们做这些事情,今天我们先来介绍一下腾讯的Bugly这个SDK。
E: 我们一起回顾一下Bugly的集成步骤:
- 注册应用,并获取APP_ID
- 添加依赖
- 修改清单文件(添加权限、配置APPID、渠道号等信息)
- 初始化:CrashReport.initCrashReport(getApplicationContext());