Dagger2 vs Android中的Application类

时间:2018-09-07 09:30:49

标签: android dagger-2 dagger

通过这个简单的示例

public class MyApp extends Application {
private static MyApp app;
private ImageDownloaderComponent imageDownloaderComponent; // dagger2

ImageDownloader imageDownloader;
@Override
public void onCreate() {
    super.onCreate();
    app = this;
    imageDownloaderComponent = DaggerImageDownloaderComponent.builder().imageDownloaderModule(new ImageDownloaderModule(this)).build();

    imageDownloader=new ImageDownloader(this);

}

public static MyApp app(){
    return app;
}

public ImageDownloaderComponent getImageDownloaderComponent(){
    return this.imageDownloaderComponent;
}
}

使用Dagger2

public class MainActivity extends AppCompatActivity {
@Inject ImageDownloader downloader;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MyApp.app().getImageDownloaderComponent().inject(this);

    ImageView imageView = findViewById(R.id.main_image);
    downloader.toImageView(imageView, "https://..../fruits.png");
    } } 

不带匕首2

public class Main2Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ImageView imageView = findViewById(R.id.main_image);    
MyApp.app().imageDownloader.toImageView(imageView, "https://---/fruits.png");
 }
} 

两种情况下的活动均正常进行。我的问题为什么我们甚至需要dagger2甚至由应用程序类执行的相同任务?如何有效?我用谷歌搜索,除了那里有什么好处之外,我还很容易进行测试?在以上示例中,哪个活动好?为什么?

1 个答案:

答案 0 :(得分:1)

我们知道Dagger是依赖注入。

使匕首独特的简述:

优点:

  1. 如果我们在像您给定的非常小的项目/任务中使用匕首,则匕首不会 值得的。它将在中长期的应用中更加有效。因为它有助于我们避免代码中不必要的对象创建。

  2. 我们可以使用匕首通过对象图重用对象。

  3. 我们可以像这样分发依赖项
    • 项目级别
    • 应用程序级别
    • 模块级别(例如:家庭,应用中的帐户)
  4. 我们可以定义自定义范围,也有一些已经定义的范围,例如Singleton,匕首中有一些不错的概念,例如组件依赖项 sub组件

  5. 可以注入Class,Object,Constructor。