1.解耦原因
• 组合关系:Activity中还有业务的引用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMainActivityPresenter = new MainActivityPresenter(this);
…
2.常见的解耦方式
• 利用配置文件,使用反射获取到需要加载的对象。
• 设计模式:单例、工厂、观察者……
3.注解回顾
a.注解本身是一个类,用于标注其他类或者方法的特性。
b.注解类有点像属性,可以多个使用,标注对象的功能。
c.生活中的例子
@Game,@Code
Student student1;
@Code,@Love(girlfriend = “xiaohong”)
Student student2;
Student{
String name;
Int age;
}
3.dagger2的使用
apt插件的安装:
1.在project的gradle中添加
buildscript {
dependencies {
classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’
}
}
2.apt插件的使用
在modle的gradle中添加
apply plugin: ‘com.neenbedankt.android-apt’
3.添加dagger2的依赖
dependencies {
compile ‘com.google.dagger:dagger:2.6’
apt ‘com.google.dagger:dagger-compiler:2.6’
}
四个注解使用
@Module、@Provides、@Component、@Inject
@Module:标注对象创建的容器
@Module
public class MainActivityModule {
MainActivity mMainActivity;
public MainActivityModule(MainActivity mainActivity) {
mMainActivity = mainActivity;
}
@Provides:标识需要创建的对象
MainActivityPresenter providerMainActivityPresenter(){
return new MainActivityPresenter(mMainActivity);
}
}
@Component:将创建好的对象与需要注入的对象组合到一起
@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
void in(MainActivity mainActivity);
}
@Inject
MainActivityPresenter mMainActivityPresenter;
最后赋值即可:
DaggerMainActivityComponent.builder().mainActivityModule(new MainActivityModule(this)).build().in(this);