Articles of dagger 2

活动停止时Dagger 2保存并恢复状态

我陷入了僵局。 我正在使用Dagger 2进行dependency injection,但是当应用程序进入后台时我正在失去状态。 这是场景:应用程序启动并创建依赖项。 只要应用程序停留在前台,所有function都可以完美运行。 但是,有一种情况是应用程序必须进入后台。 当它返回时,存储在我注入的一个类中的值将丢失。 对于我没有自己依赖的注入类,一切似乎都恢复正常。 但是,有一个注入类具有注入依赖项,而这是一个无法恢复的类。 以下是我如何设置它: AppComponent.java @Singleton @Component( modules = { AppModule.class } ) public interface AppComponent { SessionKeyExchangerService provideSessionKeyExchangerService(); AESCipherService provideCipherService(); void inject(LoginActivity loginActivity); } AppModule.java @Module public class AppModule { @Provides @Singleton AESCipherService provideCipherService() { return new AESCipherService(); } @Provides @Singleton SessionKeyExchangerService provideSessionKeyExchangerService(AESCipherService service) { return new […]

Dagger 2,Gradle Plugins和Jack – 需要指导

我正在使用Dagger 2(DI库的第一次用户)和Android Studio(AS 2.1.2 – SDK 24),显然我的第一个想法是“为了使用它需要哪些依赖项?” 看了一些例子,我可以看到你需要在顶级build.gradle文件中需要一个注释处理器插件: classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’ 现在, Module级build.gradle的依赖build.gradle应用了Module的apt插件,所以我最终得到了类似的东西: apply plugin: ‘com.neenbedankt.android-apt’ // other generic settings – android / buildTypes etc. dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) . . compile ‘com.google.dagger:dagger:2.6’ apt ‘com.google.dagger:dagger-compiler:2.6’ provided ‘javax.annotation:jsr250-api:1.0’ } 问题 在我的项目中,我一直在使用Jack Tool Chain和Java 8,发现上面的配置与Jack不兼容。 为了让Jack和Dagger 2合作,研究了我需要的东西,我改变了以下内容: gradle-wrapper.properties: 变成 : distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip build.gradle (顶级) 变成: classpath […]

Dagger2:组件不能依赖于多个范围的组件

是的,我知道以前曾经问过,是的,我知道这是“按设计”。 但是我想做这样的事情: @Component(modules = {RealmModule.class}) public interface RealmComponent { Realm realm(); } @Component(modules = {RepositoryModule.class}) public interface RepositoryComponent { PersonRepository personRepository(); ScheduleRepository schedulesRepository(); } @Component(dependencies = {RealmComponent.class, RepositoryComponent.class}) public interface AppDataComponent extends RealmComponent, RepositoryComponent { } @ApplicationScope @Component(dependencies = {AppContextComponent.class, AppDataComponent.class, AppDomainComponent.class, AppPresentationComponent.class, AppUtilsComponent.class}) public interface ApplicationComponent extends AppContextComponent, AppDataComponent, AppDomainComponent, AppUtilsComponent, AppPresentationComponent { void […]

Kotlin和Dagger2

我正在尝试将Kotlin添加到我的项目中,但是在启用Kotlin之后我无法构建,因为Dagger2类不再生成。 我尝试了第二个项目,我有同样的问题(实际上更糟糕的是,它抱怨Dagger2和DataBinding)。 这些是我为启用Kotlin所做的改变: 项目build.gradle: diff –git a/build.gradle b/build.gradle index 486700c..91e4cda 100644 — a/build.gradle +++ b/build.gradle @@ -1,13 +1,15 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.kotlin_version = ‘1.0.5-3’ repositories { jcenter() } dependencies { – classpath ‘com.android.tools.build:gradle:2.3.0-alpha2’ + classpath ‘com.android.tools.build:gradle:2.3.0-beta1’ classpath ‘com.google.gms:google-services:3.0.0’ classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’ […]

Android上的Dagger 2。 存储和访问@Singleton组件的不同方法

这是关于如何存储@Singleton作用域Dagger 2组件的第N个问题,其寿命应该等于应用程序的生命周期。 在使用Dagger 2的Android应用程序中,通常至少有一个组件是@Singleton范围,并且应该持续所有应用程序的生命周期:由于这些要求,它通常被初始化并存储在自定义Application类中。 由于这个Component的实例必须在我们的Application的所有部分都可以访问,所以我看到过这样的代码: 1.将组件存储在应用程序类内的公共静态variables中。 public class App extends Application { public static AppComponent appComponent; @Override public void onCreate() { super.onCreate(); appComponent = DaggerAppComponent.builder() .appModule(new AppModule(this)).build(); } } 这样它就可以在任何其他地方访问: App.appComponent.inject(this); 2.将组件存储在应用程序实例内的私有variables中,并为其创建静态访问器。 public class App extends Application { private static AppComponent appComponent; @Override public void onCreate() { super.onCreate(); appComponent = DaggerAppComponent.builder() .appModule(new AppModule(this)).build(); } public […]

什么是“如果请求,Dagger将注入这些字段,但不会创建新实例”意味着什么?

它说,在Dagger2的文档中 如果您的类具有@Inject-annotated字段但没有@Inject-annotated构造函数,则Dagger将在请求时注入这些字段,但不会创建新实例。 添加带有@Inject批注的无参数构造函数,以指示Dagger也可以创建实例。 它如何注入字段但不创建新实例? 有什么不同?

与模拟器和Web相比,改进了真实Android设备中更慢的响应时间

我正在从Android设备进行RESTful API调用以填充列表视图。 我使用了swagger codegen来生成我的改造客户端。 Dagger 2用于dependency injection 设备:华硕Zenfone 5 我试图从邮递员,网络和模拟器(genymotion)拨打电话,与真实设备相比,它要快得多。 有趣的是,每当我重新启动手机两到三次请求时,响应时间是正常的,之后变慢。 我在okHTTP中阅读了一些关于gzip压缩的博客并尝试实现但没有效果。 如果有人可以帮助我找出问题,那将会非常有帮助。

除了测试,为什么我们需要Dagger 2?

此时,我对dependency injection(DI)的理解仅来自本文 。 我有兴趣尝试,但我只需澄清一些事情: 许多人将DI称为减少样板代码的工具。 但根据该教程,Dagger 2的设置往往会为配置(模块和组件)创建更多类。 我没有尝试过,但从它的外观来看,它并没有减少代码,它只是拆分它们,所以主类看起来更整洁。 我错了吗? 尽管Dagger 2声称 DI不仅仅用于测试,但很多人都将其主要用于测试,包括Android自己的指南 。 你有没有在生产就绪的应用程序中使用Dagger 2? 它有多大用处? 如果我对通过构造函数创建的传统依赖项非常熟悉,我是否还需要查看Dagger 2? 我觉得这个库可能有能力改变我对RxJava的编码方式,我只是不确定它的好处和RxJava给我的一样多。 我知道,将Dagger与RxJava进行比较就像将苹果与橙子相比较。 但从某种意义上说,它们都像Dagger一样是水果,而RxJava是可能使我的项目更大的第三方库。

dependency injection服务

我试图inject dependencies注入我的应用程序。 在我尝试将Realm注入我的Service类之前,一切正常。 我开始收到IllegalStateException ,这显然是由我从创建的Thread访问Realm引起的。 所以,这是我的Dependency Injection的结构 AppModule @Module public class AppModule { MainApplication mainApplication; public AppModule(MainApplication mainApplication) { this.mainApplication = mainApplication; } @Provides @Singleton MainApplication getFmnApplication() { return mainApplication; } } RequestModule @Module public class RequestModule { @Provides @Singleton Retrofit.Builder getRetrofitBuilder() { return new Retrofit.Builder() .baseUrl(BuildConfig.HOST) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(CustomGsonParser.returnCustomParser())); } @Provides @Singleton OkHttpClient getOkHttpClient() { […]

查找数据绑定错误的实际错误

我正在使用数据绑定没有任何问题,它工作得很好。 但有时候通过无缘无故地显示数据绑定错误来隐藏真正的问题会让我感到很沮丧。 上次我在房间数据库中做了一些更改,错误地在ROOM DAO中使用了错误的表名。 在构建项目时,android studio无缘无故地显示了多个数据绑定错误,但没有真正的罪魁祸首(错误的表名)。 当我修复该构建工作。 现在我再次做了一些更改,它给了我相同的数据绑定错误,我正在浏览每个文件,find真正的罪魁祸首,但没有看到任何问题。 任何帮助显示所有错误不仅仅是数据绑定错误。 这是非常烦人的Android Studio gradle build没有在底部显示所有错误。