Dagger2 vs android中的Application类

问题描述 投票:2回答:1

通过这个简单的例子

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甚至应用程序类执行相同的任务?它的有效方式如何?谷歌它,我有它的容易测试除了任何好处吗?以上例子中哪项活动好?为什么?

android dagger-2 dagger
1个回答
1
投票

我们知道Dagger是Dependency Injection。

使匕首独特的简介:

优点:

  1. 如果我们在像你这样的非常小的项目/任务中使用匕首那么匕首就不值得那样。在中长期应用中使用它会更有效率。因为它有助于我们避免在代码中创建不需要的对象。
  2. 我们可以使用匕首通过对象图重用对象。
  3. 我们可以分发依赖性 项目级别 应用级别 模块级别(如:主页,应用程序中的帐户)
  4. 我们可以定义自定义范围,也有一些已定义的范围,如Singleton,匕首中有很好的概念,如组件依赖和子组件。
  5. 可以注入Class,Object,Constructor。
© www.soinside.com 2019 - 2024. All rights reserved.