Android 改装2接口-正确的方法?

Android 改装2接口-正确的方法?,android,optimization,retrofit,retrofit2,Android,Optimization,Retrofit,Retrofit2,我对如何正确编写代码有点偏执。到目前为止,我已经在很多项目(Android应用程序)中使用了改型 我通常创建一个singleton助手类来获取改造实例,并创建一个包含所有API调用的接口 大概是这样的: public class RetrofitHelper { public static API getInstance() { return ourInstance.client; // client = retrofit.create(API.class

我对如何正确编写代码有点偏执。到目前为止,我已经在很多项目(Android应用程序)中使用了改型

我通常创建一个singleton助手类来获取改造实例,并创建一个包含所有API调用的接口

大概是这样的:

public class RetrofitHelper {
    public static API getInstance() {
        return ourInstance.client;
        // client = retrofit.create(API.class); instantiated only once in singleton constructor
    }
}

公共接口API{
@POST(“api/url”)
可观察的methodOne(@Body-RequestBody-RequestBody);
@获取(“api/url/2”)
可观察方法二();
@获取(“api/url/3”)
可观察方法三();
}
我认为这很好,但每当我看到代码示例时,人们似乎都在为每个/组API调用和多个改型实例使用单独的接口

哪种方法正确?这两种方法对内存/性能的影响是否不同

您能否参考使用“正确方式”改装的项目/代码示例?如果它采用了2+RxJava+MVP架构,那就太完美了


谢谢

没有人创建不是优化方式的多个实例:

您可以参考以下示例代码链接以了解dagger 2改装和MVP:

  • **注**
    Dagger允许您创建应用程序范围对象并在整个应用程序中使用,无需每次都创建新实例

  • 编辑:

    @Module
    public class ApiModule {
    
        @AppScope
        @Provides
        APIInteface providesRetrofitApiService(Retrofit retrofit) {
            return retrofit.create(APIInteface.class);
        }
    
    }
    

    一旦你拥有了这个对象,你就可以在任何时候使用它,或者使用
    @injectapinterface-apinterface

    我需要为每个API使用不同的头和自定义值。那么我如何管理API调用呢?
    @GET(“/feeds/flowers.json”)可观察的注册(@Body-SignUpRequest-SignUpRequest)
    您必须创建不同的请求模型,然后将其作为@Body传递,然后将其作为
    改型的多个实例传递。我不这么认为,因为它是Singleton
    @提供@Singleton改型ProviderTrofit(OkHttpClient-OkHttpClient、GsonConverterFactory-GsonConverterFactory、RxJava2CallAdapterFactory-callAdapterFactory){返回新的改装.Builder().baseUrl(baseUrl).addConverterFactory(gsonConverterFactory).addCallAdapterFactory(callAdapterFactory).client(okHttpClient).build();}
    @Module
    public class ApiModule {
    
        @AppScope
        @Provides
        APIInteface providesRetrofitApiService(Retrofit retrofit) {
            return retrofit.create(APIInteface.class);
        }
    
    }