改造类的注释方法@Provides是否应用@Singleton注释



我有一个Dagger2 @Module类,其中包含@Provides注释方法,该方法调用Retrofit.create方法:

@Provides
RestService provideRestService(final Retrofit retrofit) {
    return retrofit.create(RestService.class);
}

我应该用@Singleton注释来注释此方法吗?

我看到这样做的一个原因:每次调用create都有一定的成本,不这样做的一个原因是:保留一个实例有一些成本(Dagger 每次请求实例时都会执行双重检查(。

哪种解决方案更受欢迎?带或不带@Singleton注释?或者也许它根本不重要?或者我在提供程序中创建此类的方法从根本上是错误的?

如果允许其他实例但可能很昂贵,则还可以考虑使用 @Reusable 。您失去了双重检查锁定,但您(可能(缩短了对象的生命周期,并获得了实例安装位置的灵活性。

当您想要限制某个类型的设置数时,@Reusable很有用,但没有必须只有一个实例的特定生存期。

请参阅用户指南主题或 SO 问题dagger@Reusable范围与@Singleton。

是的,你应该这样做。避免内存分配。Android将保持相同的实例,直到应用程序被杀死。考虑一下,如果您像在 for 循环中一样调用 api,并且每次创建新实例时(不推荐,当您在同一注入中使用 dagger 时不会发生,但就像一个例子一样(。它会杀死你的记忆。所以你应该使用 @Singleton .

单例将确保您将跨模块使用相同的实例。

最新更新