gpt4 book ai didi

android - Dagger2 与 Android 中的应用程序类

转载 作者:行者123 更新时间:2023-11-29 00:59:33 25 4
gpt4 key购买 nike

通过这个简单的例子

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");
} }

没有 Dagger 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");
}
}

两个案例 Activity 都运行良好。我的问题为什么我们需要 dagger2 甚至由应用程序类执行相同的任务?其方式如何有效?我用谷歌搜索,除了那里的任何好处外,我还很容易进行测试??以上例子中哪个 Activity 好?为什么?

最佳答案

众所周知,Dagger 是依赖注入(inject)。

使 Dagger 独一无二的简介:

好处:

  1. 如果我们像您提供的那样在非常小的项目/任务中使用 dagger,则 dagger 不会应得的。在中长应用程序中使用它会更有效率。因为它可以帮助我们避免在代码中创建不需要的对象。

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

  3. 我们可以像这样分发依赖
    • 项目级别
    • 应用级别
    • 模块级别(例如:主页、应用中的帐户)
  4. 我们可以定义自定义作用域,也有一些已经定义好的作用域比如Singleton,在dagger中有很好的概念比如component dependency & sub组件

  5. 可以注入(inject)Class,Object,Constructor。

关于android - Dagger2 与 Android 中的应用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com