前言

为了扩展大家的知识面,工作后对当前流行的一些开源框架有所了解,今天我们会给大家介绍一系列的第三方框架的使用方法。这些框架有的能简化我们的代码,比如那些繁冗的findviewbyid操作,有的把我们访问网络的操作进行了封装,有的可以高效地帮助我们实现图片下载和显示的功能,有效避免OOM,有的能高效地处理数据库的增删改查操作,等等。总之,掌握当前流行的第三方框架的使用方法能够有效提高我们的开发效率,下面我们就来对这些框架一一讲解。

  1. 依赖注入概念

B: 框架的使用目的之一就是简化代码、降低耦合性。在接触开源框架之前,首先了解一个概念——依赖注入。

E: 如果ClassA中用到了ClassB的实例,我们称A依赖于B,因为要有B的实例,A才能运行起来。如果在A中直接初始化B,称为硬初始化。硬初始化的弊端是,如果B的构造方法或者创建实例的方式发生改变,A中所有初始化B的地方都要做修改,程序耦合性很高。依赖注入是通过注解的方式,把一个类所依赖的对象实例赋值到所持有的引用中,而对象的实例化过程从调用者转移到相关的容器控制程序中(第三方框架)。

  1. 依赖注入Butterknife

B: 了解了依赖注入的概念后,我们首先看一个与依赖注入相关的开源框架——ButterKnife。平时我们创建完布局文件后,在Activity中要进行大量的findViewById的操作,十分繁琐,而ButterKnife能够把大家从繁冗的findViewById的操作中解脱出来。

E: ButterKnife底层使用了反射的机制,会从遍历Activity的变量和方法,判断变量和方法上面是否有自己定义的注解,例:如果有@Bind这个注解,会把@Bind注解中的Id参数对应的控件通过findViewById找到,赋值给对应的成员变量。(ButterKnife底层也是用findViewById实现的)。有了ButterKnife,我们再也不用为findViewById而烦恼了!

  1. 依赖注入AndroidAnnotations

B: ButterKnife只能实现一些控(TextVeiw)件和事件(onClick)的注入。下面我们介绍一个比ButterKnife更牛逼的框架AndroidAnnotations。这个框架不仅能实现ButterKnife的功能,还能实现Extra数据、资源、系统服务等等的依赖注入,简化线程模型和网络请求。

E: 我们总结一下使用AndroidAnnotations的步骤:

  1. 配置build.gradle文件
  2. 在Activity上增加注解@EActivity
  3. 修改清单文件中的Activity名称(最后加“_”)
  4. 定义注解并使用
  1. 依赖注入 Dagger2

B: ButterKnife和AndroidAnnotation都能对Android原生的控件或者事件进行注入,如果我们要对自己定义的一个类,比如User进行依赖注入,就不奏效了;这时我们要引入另一个更高级的开源框架Dagger2.

E: Dagger2可以让我们开发者注入一个自定义的对象。现在回顾一下注入的步骤:

  1. 配置gradle文件
  2. 创建Moduel类,类中包含provides方法
  3. 创建Component接口,指定Moduel类和自定义对象要注入的地方
  4. 声明自定义对象@inject User user; 并注入:MainActivityComponent component = DaggerMainActivityComponent.builder().mainActivityModuel(new MainActivityModuel()).build();  component.inject(this);
    1. 网络Volley

B: 接下来给大家介绍一个网络请求相关的框架Volley,Volley是Google推荐的网络请求框架,它适用于数据量小,请求比较频繁的情况。现在我们看一下Volley的具体使用方法。

E: 我们总结一下Volley的使用步骤:

  1. 创建一个请求队列RequestQueue
  2. 创建Request请求
  3. 把请求加入到请求队列中

一般在使用Volley的时候,我们会对它进行简单的封装,比如我们Demo中用到的VolleyFactory。

  1. 网络OkHttp

B: Volley只在数据量传输较小的网络请求情况下适用,如果网络请求数据量比较大,比如文件的传输、图片的下载等等,Volley就不好使了。为了解决这个问题,我们引入另一个网络框架——OkHttp。OkHttp的使用方法和Volley类似,只是在请求成功或者失败的回调中,依然是子线程,而没有转到UI线程中。我们看一下具体的用法。

E: OkHttp的使用步骤:

  1. 创建OkHttpClient对象
  2. 创建Request对象
  3. 添加请求对象Request到OkHttpClient对象中,并执行请求。

由于OkHttp请求成功或者失败的回调方法依然是在子线程中,我们要想在请求结束后更新UI,就要使用Handler机制转到UI线程去做相应的操作。这给我们开发造成了麻烦,所以一般我们使用OkHttp都是直接使用OkHttpUtils,它对OkHttp进行了简单的包装,使用它进行网络请求,失败或者接受后,自动回到主线程,我们可以直接更新UI。

  1. 网络Retrofit

B: 无论Volley还是OkHttp,在网络请求的时候,一般都不会对返回结果进行处理,只是原样输出。而如果数据传输格式为json,能不能直接把请求的数据转换为我们封装好的bean对象呢?Retrofit就能实现这种需求。

E: 总结一下Retrofit的使用步骤:

  1. 在线创建数据模型
  2. 创建REST接口
  3. 创建Retrofit对象并发起请求
  1. 图像_UIL

B: 接下来我们认识和图像下载相关的第三方框架,说道图像下载,最经典的就是Universal_Image_Loader了,我们来看一下如何使用它。

E: 我们总结一下UniversalImageLoader的使用步骤:

  1. 配置联网和写入SD卡的权限
  2. 初始化配置
  3. 显示图片

DisplayImageOptions中定义了图片的各种显示方法,大家可以到官网查看。

  1. 图像_Fresco

B: 如果说UniversalImageLoader是一个加载图片比较强大的框架,Fresco比UniversalImageLoader的功能更强大,不仅能加载普通图片,可以轻松通过布局文件中的属性设置图片的圆角等特性,还可以加载GIF图片和渐进式JPEG图片。我们来看一下它的用法。

E: Fresco的用法比较简单,在布局文件中使用SimpleDraweeView代替普通ImageView,在代码中初始化(一定要在setContentView之前调用),并设置URI即可view.setImageURI(uri);借助DraweeController还可以显示GIF图片或者渐进式JPEG图片。

  1. 图像_Picasso_Glide

B: 接下来我们再介绍两个图像开源库,Picasso和Glide,之所以把两个放在一起介绍,是因为两者的使用方法或者API基本一样。

E: Picasso和Glide的使用非常简单。直接调用Picasso/Glide.with(context).load(uri).into(imageView)即可,如果想显示圆形图片或者圆角图片,创建一个BitmapTransformation的子类,调用transfrom方法即可。介绍了这几个图片的加载库,下面我们来比较一下他们的特点,分析一下在什么时候用什么库:

  1. 加载图片速度最快的是Glide
  2. 加载图片质量最好的是Picasso
  3. 如果应用加载的图片很多,推荐使用Fresco > Glide > Picasso
  1. 数据库_ormlite

B: 平时开发中,用数据库存储数据的情况很多,如果用原生DataBaseOpenHelper的方式操作数据库,效率比较低,而且代码量比较多。所以在实际开发中,操作数据,我们一般也是要借助第三方的框架。首先介绍ormlite框架。

E: OrmLite是采用注解的方式把我们定义的JavaBean对象的各个字段对应到数据库表的字段上。使用OrmLite的步骤如下:

  1. 配置gradle
  2. 定义表示数据库表结构的实体类对象
  3. 创建OrmLiteSqliteOpenHelper的实现类
  4. 生成DAO对象
  5. 用DAO对象对数据库进行增删改查的操作。
  1. 数据库_GreenDao

B: GreenDao也是一款操作数据库的框架,它的优点就是快,操作数据库的速度远远超过Ormlite和原生数据库操作方式。我们来学习一下GreenDao如何使用。

E: GreenDao可以通过DaoGenerator为我们自动生成Dao和数据库表结构JavaBean的代码。通过DaoMaster.DevOpenHelper初始化数据库,并获取dao对象,只要得到了dao对象,就可以对数据库进行增删改查操作了。

  1. 响应式函数编程1

B: 接下来我们介绍一个新的概念,响应式编程。它能够在程序逻辑异常复杂的情况下,使代码逻辑保持简介。我们来学习一下响应式编程到底是什么。

E: 响应式编程是基于事件的。以事件的角度出发,分为观察者、被观察者,通过订阅的方式把观察者注册给被观察者,监听事件的触发。

  1. 响应式函数编程2

B: 响应式函数编程是一种新的编程思路,我们学习一下这种编程思路下,如何使用Retrofit框架。

E:我们总结一下响应式编程下Retrofit的使用步骤:

  1. 添加依赖
  2. 创建数据模型
  3. 创建REST接口
  4. 创建Retrofit对象并发起请求。

6.1 第三方分享_Mob

B: 现在的APP一般都带有分享功能,能够让用户通过各个渠道分享APP中有价值的信息。现在主流的分享渠道包括QQ、微博、微信、朋友圈、短信等等。如果我们自己来做这些渠道的分享,是件既费时又费力的工作,因此在做分享功能的时候,我们也可以借助第三方的SDK。今天我们就介绍一下ShareSdk的使用方法。

E: 我们总结一下ShareSdk的集成步骤:

  1. 在Mob网站上注册APP,获取APPkey
  2. 下载SDK包
  3. 利用工具QuickIntegrater.jar生成相关资源文件,拷贝到工程中的相关文件夹中。
  4. 配置权限
  5. 按要求更改清单文件(添加Activity信息)
  6. 更改assets/ShareSDK的配置信息(如果不配置,会分享失败)
  7. 利用OneKeyShare进行分享。

市面上有很多第三方分享的SDK,除了我们介绍的ShareSdk,还有友盟的分享等等。这些SDK使用的宗旨只有一个:按照集成文档一步步的做。而实际上,他们的集成步骤是大同小异的。

  1. 数据统计_百度统计

B: APK包上传到各个应用市场运营后,往往需要我们进APP的运行情况进行追踪,比如:运行过程中出现过哪些崩溃的bug,用户进入到某个页面的概率是多大,在这个页面停留多长时间,等等。为了满足这种需求,需要我们的APP在上线之前集成统计SDK,第三方统计SDK也比较多,比如百度统计、友盟统计等等。今天我们就来介绍一下百度统计的使用方法。

E: 学习了百度统计,同样我们来回顾一下集成百度统计SDK的步骤:

  1. 注册并获取appkey(和ShareSdk是不是类似?)
  2. 按照集成文档修改清单文件(添加权限、增加meta-data)
  3. 在所有页面(Activity 、 Fragment)的onResume() 和 onPause()方法中添加StatService.onResume(Context  context) 和StatService.onPause  (Context  context)方法。

8.1 消息推送_个推

B: 现在消息推送在APP中越来越普遍了。即时聊天、消息通知这些功能基本上都是使用的消息推送,和分享、统计类似,这些工作也已经有第三方的SDK帮我们实现了,我们只需要集成SDK即可。今天我们就来介绍一下个推这个推送SDK。

E: 我们来总结一下个推SDK的集成步骤:

  1. 注册APP,并获取APPid和Appkey
  2. 下载SDK包
  3. 将GetuiExt.jar和GetuiSDK.jar拷贝到项目中的libs,并添加到依赖
  4. 在jniLibs文件夹中添加so库
  5. 拷贝资源文件
  6. 修改清单文件(添加权限、meta-data、配置Activity和服务)
  7. 初始化SDK 。PushManager.getInstance().initialize( this.getApplicationContext() );

9.1 Bug追踪_Bugly

B: 当APP上线后,如果我们想对APP的bug进行追踪,那么就可以继承一些第三方的SDK替我们做这些事情,今天我们先来介绍一下腾讯的Bugly这个SDK。

E: 我们一起回顾一下Bugly的集成步骤:

  1. 注册应用,并获取APP_ID
  2. 添加依赖
  3. 修改清单文件(添加权限、配置APPID、渠道号等信息)
  4. 初始化:CrashReport.initCrashReport(getApplicationContext());

ZUI易入门Android之开源框架的使用相关推荐

  1. ZUI易入门Android之Okhttp的相关概念

    什么是okhttp? okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakC ...

  2. ZUI易入门Android之客户端适配9.0方案

    目录 Section 1: 前言 1-4 1 概念 1-4 2 读者 1-4 3 参考文档 1-4 Section 2: 技术方案 2-5 1 所有应用的行为变更 2-5 1.1 非SDK开放接口 2 ...

  3. ZUI易入门Android之Bitmap(一)

    大家都知道,android 应用在创建进程时候,会分配一个指定的内存大小,准确的说话是 google原生OS的默认值是16M,如果我们应用"毫不吝啬"将这些大图直接加载到内存中,很 ...

  4. ZUI易入门Android之JobScheduler

    在一篇关于网络优化的博文中发现了这个词.我们的项目中并没有使用到这个东西,但看了一下还是非常好用的,mark一下以后一定会用到吧. 贴官方文档,喜欢自学的可以过去看看 贴官方Demo,官方给出的例子也 ...

  5. ZUI易入门Android之Git的使用(一)本地仓库

    git的功能是很强大的,既可以做"本地仓库",也可以在"远程仓库"进行管理. git的基本使用如下 1.git init (初始化本地仓库) 2.git sta ...

  6. ZUI易入门Android之SQL 语句大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server ---  ...

  7. 各种Android UI开源框架 开源库

    各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...

  8. Android优秀开源框架集

    Android优秀开源框架介绍 开篇 网络请求框架 1. okhttp 2. retrofit 3. android-async-http android图表框架 4. MPAndroidChart ...

  9. 各种Android UI开源框架

    自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/search Android库 ...

最新文章

  1. 浏览器缓存详解:expires,cache-control,last-modified,etag详细说明
  2. python基础教程:可变,不可变数据类型
  3. @所有人 Flink Forward Asia 2020 向您发出议题征集邀请!
  4. [vue] vue在created和mounted这两个生命周期中请求数据有什么区别呢?
  5. Android Studio 1.1的安装和遇到的坑
  6. Linux系统Posix异步IO接口(aio.h):aio_read,aio_write,aio_error
  7. 关于Android RenderScript 的详细说明和一些实用文档
  8. 第 19 章 保护方法调用
  9. 严格的别名规则是什么?
  10. Assets和Raw区别
  11. 如何查看文件是否为csv格式_Spark实战第二版(涵盖Spark3.0)第七章 从文件接入数据...
  12. river歌曲表达的意思_闽南语歌曲《欢喜就好》详解
  13. 前端工具,网址推荐,方便开发,学习。
  14. 中班音乐会跳舞的机器人_中班音乐律动机器人
  15. 计算机英语实用教程第五版答案,(计算机英语实用教程课后题参考答案.doc
  16. 联想从国有企业演变成民营集团揭秘(深度)
  17. HDU5142 NPY and FFT BestCoder Round #22 1001
  18. ROMS海洋模式笔记
  19. 网络 DNS 解析与CDN加速
  20. NYOJ-108-士兵杀敌(一)

热门文章

  1. 将文字转换成图片,可以换行转换
  2. SNF软件开发机器人产品白皮书
  3. 整数边界对齐方式_c中结构体边界对齐(转)
  4. 【精选】JAVA入门算法题(二)
  5. FishNet网络搭建代码阅读(1)——fish_blocknet_factory
  6. ORA-00607 Internal error occurred while making a change to a data block处理
  7. 一种新的人才流动形式
  8. 2022届华中科技大学软件学院考研经验贴
  9. 警告 C6011 取消对NULL指针XXX的引用
  10. 一文讲透静电放电(ESD)保护(转发)