是否应使用@Singleton注释@Provides Retrofit类的注释方法

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

我有一个Dagger2 @Module类与@Provides注释方法调用Retrofit.create方法:

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

我应该用@Singleton注释注释这个方法吗?

我看到了这样做的一个原因:每次调用create都有一些成本和一个不这样做的原因:保持一个实例有一些成本(Dagger在每次请求实例时执行双重检查)。

哪种解决方案首选?有或没有@Singleton注释?或者它可能根本不重要?或者我在提供程序中创建此类的方法从根本上是错误的?

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

如果允许其他实例但可能很昂贵,您也可以考虑使用@Reusable。您丢失了双重检查锁定,但您(可能)缩短了对象的寿命并获得了安装实例的灵活性。

当你想限制一个类型的条款数量时,@Reusable很有用,但是没有特定的生命周期,只有一个实例。

请参阅the User's Guide topic或SO问题Dagger @Reusable scope vs @Singleton


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.