day15 MVP--ButterKnife--Dagger2

Android中的MVP

MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍 MVC。在MVC模式中,Activity应该是属于View这一层。而实质上,它既承担 了View,同时也包含一些Controller的东西在里面。这对于开发与维护来说不 太友好,耦合度大高了。把Activity的View和Controller抽离出来就变成了View 和Presenter,这就是MVP模式。 按照MVC的分层,Activity和Fragment(后面只说Activity)应该属于View 层,用于展示UI界面,以及接收用户的输入,此外还要承担一些生命周期的工 作。Activity是在Android开发中充当非常重要的角色,特别是TA的生命周期的 功能,所以开发的时候我们经常把一些业务逻辑直接写在Activity里面,这非常 直观方便,代价就是Activity会越来越臃肿,超过1000行代码是常有的事,而且 如果是一些可以通用的业务逻辑(比如用户登录),写在具体的Activity里就意 味着这个逻辑不能复用了。如果有进行代码重构经验的人,看到1000+行的类 肯定会有所顾虑。因此,Activity不仅承担了View的角色,还承担了一部分的 Controller角色,这样一来V和C就耦合在一起了,虽然这样写方便,但是如果 业务调整的话,要维护起来就难了,而且在一个臃肿的Activity类查找业务逻辑 的代码也会非常蛋疼,所以看起来有必要在Activity中,把View和Controller抽 离开来,而这就是MVP模式的工作了。

MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成 Presenter接口,Model类还是原来的Model。 接口就是为了遵守规则,实现接口就是实现规则
① 分离了视图逻辑和业务逻辑,降低了耦合
②Activity只处理生命周期的任务,代码变得更加简洁
③视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提 高代码的可阅读性
④ Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单 元测试
⑤把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致 Activity的资源无法被系统回收从而引起内存泄露和OOM

MVP关系图

在这里插入图片描述

创建MVP项目

File—>setting—>plugin—>搜索MVPHelper—>在module包名下创建一个presenter包,然后创建一个Presenter接口,用快捷键Alt+Insert选择MVPHelper即可生成对应文件

(注释:view包需要自己手动创建,把MainActivity拖进view包下)

MVP

M(model):获取数据,给p层提供网络或本地的的数据,然后回传给P层
V(view):刷新数据,按钮的点击事件
P(presenter):处理数据,回调v曾的方法,并给V层显示

ButterKnife

注于Android系统的View注入框架,当一个布局十分复杂时,需要引入执行大量的 findViewById代码来找到View的对象,有了ButterKnife可以很轻松的省去这些步骤。是大 神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没 有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的 class。项目集成起来也是特别方便,使用起来也是特别简单。

ButterKnife的优势

  1. 强大的View绑定事件和资源文件的绑定
  2. 使用的便捷性上,剔除了原始绑定时候的复杂性
  3. 由于大多数的注解都是在编译期,所以不会影响程序运行的效率
  4. 代码清晰,可读性相对来说要强很多

ButterKnife的使用

1.导入依赖,在项目的build.gradle中的dependencies下添加:
classpath 'com.jakewharton:butterknife-gradle-plugin:10.0.0'
2.在module的build.gradle中添加:
 apply plugin: 'com.jakewharton.butterknife'

android下添加:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
     targetCompatibility JavaVersion.VERSION_1_8 
      }

依赖下添加:

implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife‐compiler:10.0.0'

ButterKnife生成

File—>setting—>Plugin—>搜索ButterKnife,找到Android ButterKnife Zeleany进行重启安装Android Studio

在MainActivity中的

在这里插入图片描述

Alt+Insert,选中荷包蛋

在这里插入图片描述

如果选中点击事件就会变成

在这里插入图片描述

Dagger2

Dagger2的意义

Dagger2是什么? Dagger2是Dagger的升级版,是一个依赖注入框架,第一代由大名鼎鼎的 Square公司共享出来,第二代则是由谷歌接手后推出的,现在由Google接手维 护.

依赖

依赖是指某个模块A要实现某个功能需要其他模块B。 最原始也最简单的的方式是在模块内new一个B的对象出来,这样会造成B的构 造函数修改,需要修改A中的代码,两者耦合度非常高。

依赖注入

依赖注入是不在A中去创建 B的实例,而是让上层调用者注入一个B的对象,这 样可以让模块A不再因为B的构造方法的修改而改变

导入的依赖

implementation"com.google.dagger:dagger:2.16"
annotationProcessor"com.google.dagger:dagger‐compiler:2.16" 

Dagger2的基本使用

1. 创建注入提供者类
2. 提供者创建构造方法
3. 给构造方法添加@Inject注解,表明对外提供依赖,并写个方法
public class LoginListener {
    @Inject
    public LoginListener(){

    }
}
4. 在接收注解方创建提供注解类的对象并添加@Inject注解,表明这个对 象需要注入
@Inject
LoginListener loginListener;
5. 创建注解的桥梁,或者叫注入者。注入者是一个接口,需要用 @Component注解,并且提供一个方法用来表示向谁注入。
@Component
public interface MyCommpont {
    void inject(MainActivity mainActivity);
}
6. 注意到这里可以锤了
7. 锤过之后如果不报错可以在build中找到如下内容

在这里插入图片描述

8. 在调用类中加载Dagger,然后就可以调用了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值