dagger android,dagger android 学习(二):AndroidInjector的使用
本系列博客主要用于自己学习积累,顺便帮助新手入门,如有问题,多多包涵。更详细的一些使用可以看看其他更加详细的博客。
在安卓实际开发中,我们需要用到许多的activity以及fragment,这样我们在进行依赖注入的之后都要进行一些重复的操作,比如在comonent中加入void inject(XXXActivity activity),以及在Activity中加入DaggerMyAppComponent.builder().build().inject(this),好在dagger2也提供了解决方法,让我们不需要每次去写inject方法。
添加依赖
implementation 'com.google.dagger:dagger:2.21'
annotationProcessor 'com.google.dagger:dagger-compiler:2.21'
implementation 'com.google.dagger:dagger-android:2.21'
implementation 'com.google.dagger:dagger-android-support:2.21'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.21'
复制代码
开始改造
AndroidInjector
创建一个接口继承AndroidInjector
@Subcomponent(modules = {
AndroidInjectionModule.class,
})
public interface MainActivitySubcomponent extends AndroidInjector {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder {
}
}
复制代码
ActivityModule
实现用于绑定activity的Module
@Module(subcomponents = MainActivitySubcomponent.class)
public abstract class MainActivityModule {
@Binds
@IntoMap
@ClassKey(MainActivity.class)
abstract AndroidInjector.Factory> bindMainActivityInjectorFactory(MainActivitySubcomponent.Builder builder);
}
复制代码
AppComponent
@Component(modules = {
AndroidInjectionModule.class,
AndroidSupportInjectionModule.class,
MainActivityModule.class,
Main2ActivityModule.class,
})
public interface MyAppComponent {
void inject(MyApplication application);
@Component.Builder
interface Builder{
MyAppComponent build();
}
}
复制代码
Application
application继承HasActivityInjector,实现inject方法,返回DispatchingAndroidInjector对象即可
public class MyApplication extends Application implements HasActivityInjector {
@Inject
DispatchingAndroidInjector dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerMyAppComponent.builder().build().inject(this);
}
@Override
public AndroidInjector activityInjector() {
return dispatchingAndroidInjector;
}
}
复制代码
BaseActivity
baseActivity在super.onCreate之前调用AndroidInjection.inject(this),这样之后的activity就只需要继承它,直接可以使用了,不需要再单独加入inject方法
open class BaseActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
}
}
复制代码
使用
使用的时候直接@inject就行,无需任何处理
public class MainActivity extends BaseActivity {
@Inject
A2 a2;
@Inject
C c;
@Inject
UserInfo userInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Main2Activity.class));
}
});
a2.someThingA();
c.doSomethingC();
userInfo.setAge("111");
Log.e("DAGGER", userInfo.toString());
}
}
复制代码
总结
dagger-android-support解决了每次新建Activity都需要在Activity中添加格子的inject方法,所有的inject都在BaseActivity中,这让代码简洁了很多。但是即使如此,还是有较多一部分的模板代码,如例子中的ActivityModule和ActivitySubcomponent。每次新建一个Activity都需要创建这两个类,这样看起来还是很麻烦,好在dagger2还提供了@ContributesAndroidInjector注解解决了这个问题。
demo地址:查看项目中的app模块
dagger android,dagger android 学习(二):AndroidInjector的使用相关推荐
- Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- 饭否android客户端,fanfou(饭否) android客户端 代码学习二
FanfouWidget.class 继续 代码学习1 因为重新编辑文章经常出现格式错乱,所以以后先写在记事本里面了 继续上次的发送消息 // 发送消息给widget Intent reflogin ...
- Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 学习(十) – GLSurfaceView 源码解析GL线程以及自定义 EGL
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 学习(九) – 坐标系统和实现3D效果
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 学习(五) -- 渐变色
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- android dagger2 懒加载,Android Dagger依赖注入框架浅析
今天接触了Dagger这套android的依赖注入框架(DI框架),感觉跟Spring 的IOC差不多吧.这个框架它的好处是它没有采用反射技术(Spring是用反射的),而是用预编译技术,因为基于反射 ...
- Android OpenGl Es 学习(二):定义顶点和着色器
概述 这是一个新的系列,学习OpengGl Es,其实是<OpenGl Es 应用开发实践指南 Android卷>的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为 ...
最新文章
- c mysql存储过程实例_MySQL存储过程实例
- 深入理解最大池化为什么能够实现不变性?
- 信息检索及DM必备知识总结:luncene
- linux进入mongodb数据库命令,MongoDB 常用数据库命令,命令是如何工作的这里
- swoole mysql 连接数_用swoole简单实现MySQL连接池
- mssql sql server 其它系统函数 parsename 点语法字符串分割函数应用简介
- Java 数据类型及转换
- 【js】:利用javascript打开网页
- **LPC1788加密与解密方法**
- 计算机网络VLAN间路由,交换机必学知识 VLAN间路由理论指导
- ubuntu 18.04快捷显示桌面
- 计算机网络换算方法,网络带宽换算
- 震惊!黄光裕、李嘉诚、马化腾甚至股市中的“野蛮人”都出自潮汕帮(附股)
- java小组项目口号,小组口号霸气押韵大全(精选60句)
- 李梦娇口诀88条(视频+讲义)
- 第十届上海国际泵阀展多会议活动集中发力,邀您共赴6月泵阀盛会
- poj2421修建道路
- 推荐一份PHP程序员笔试题(附答案)
- 关于睡眠排序的小尝试
- 怎样使用晨曦记账本,管理收入支出
热门文章
- 全球及中国PVC管材和管件市场“十四五”规划及发展前景展望报告2023-2029年
- 计算器核心算法(一)
- word2vec模型评估_「译」 用 Word2vec 表示音乐?
- office2007,每次打开之前都要配置更新,解决办法
- 怎么把计算机密码去掉,如何去掉开机密码 怎么把电脑开机密码去掉(图文)
- 【react】InfiniteScroll 滚动组件
- Vmware Vsphere6.0 OVF模板管理
- 上位机开发(详细设计)
- 【CSDN三周年纪念日】我的创作纪念日
- mysql bcp_bcp用法