Android Dagger2 基础 一

Android Dagger2

前言

在做项目的时候,需要向SystemUI的代码中追加自己的代码,实现一个代替原生StatusBar的功能。

前辈在做这个项目的时候是在Android8.0的系统中做的,我需要把这个功能移植到Android10.0。

在移植代码的时候,发现AOSP中新增加了一个类Dependency(packages/systemui/src/com/android/systemui/Dependency.java)。

查看Dependency中的代码,根据相关的代码注释,才知道这块功能是基于Dagger2实现的。

Dagger2在SystemUI中的使用

关于Dagger2在SystemUI中的使用,在源码中是有相关的说明文档的(packages/systemui/docs/dagger.md)。在该文档中详细的介绍了Dagger2在SystemUI中的使用。

Dagger2的基础说明

  • 什么是依赖注入 Dependency Injection

    依赖注入是实现控制反转(IoC)的一个方案。

    控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

    所以 IoC 不是技术,而是思想,利用这种思想可以降低对象间的耦合,提高代码重用率。

    通俗的来讲呢,就是一个类中需要依赖其他对象时,不需要你亲自为那些需要依赖的对象赋值,而是将为那些对象赋值的操作交给了IOC框架。

Dagger2在AndroidStudio中的配置

在这边突然追加一个配置的章节主要是因为下面的关键字说明我将结合一些简单的代码。

我的AndroidStudio的版本是4.0.2

只需要在Module:app的build.gradle的dependencies中追加如下的配置项(最后三行配置):

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    //引入dagger2
    implementation 'com.google.dagger:dagger:2.4'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.4'
    //java注解
    compileOnly 'org.glassfish:javax.annotation:10.0-b28'
}

Dagger2的关键字的说明

查看Dependency.java的代码,可以看到如下的关键字:

@Inject

主要有两个作用 #1 作为依赖注提供方: 使用@Inject注解构造方法。 注解构造函数,让Dagger2帮我们实例化该,并注入。 #2 作为依赖需求方: 使用@Inject注解成员。 如果一个成员变量@Inject注解修饰,并且成员类构造函数也被@Inject注解,那么dagger2帮我们实例化该成员类,并注入。 通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。这样,Dagger就会构造一个这个类的实例并满足他们的依赖。

使用@

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值