我应该使用单身改装吗?

use*_*624 15 android retrofit

我是新手进行改造,想知道什么是最好的做法.

这是我在网上找到的一些抽象代码:

public class RestClient

{
    private static final String BASE_URL = "your base url";
    private ApiService apiService;

    public RestClient()
    {
        Gson gson = new GsonBuilder()
                .registerTypeAdapterFactory(new ItemTypeAdapterFactory()) // This is the important line ;)
                .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'")
                .create();

        RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setEndpoint(BASE_URL)
                .setConverter(new GsonConverter(gson))
                .setRequestInterceptor(new SessionRequestInterceptor())
                .build();

        apiService = restAdapter.create(ApiService.class);
    }

    public ApiService getApiService()
    {
        return apiService;
    }
}
Run Code Online (Sandbox Code Playgroud)

并且假设我想用这个函数发出api请求/调用

RestClient restClient = new RestClient();
restClient.getApiService().getPosts();
Run Code Online (Sandbox Code Playgroud)

我的问题是我应该创建一个新的restClient对象,或者这应该是一个单例,或者ApiService应该是一个单例.

什么是最佳做法?请记住,我不想使用依赖注入,我只想了解如何最好地使用改造.

你们有人会怎么打电话?

jak*_*ski 9

你应该RestClient以任何你喜欢的方式(enum,standard getInstance()或者甚至double check)制作单身.

让他们为单身会提高性能,因为你不会每个珍贵的对象,如创建时间Gson,RestAdapterApiService.

编辑: Retrofit可以同时处理的最大请求取决于HttpClient配置.

使用时,OkHttp默认值为64(定义中Dispatcher).

但是它可以通过操作setMaxRequests(),请记住不要产生太多线程(它可能导致OutOfMemory).


Gre*_*eek 5

您拥有的代码很好。您可以将restClient保持为单例,然后restClient.getApiService().getPosts();只要想再次获取帖子就打电话(不要每次都创建一个新的restClient)。

  • 是的,它可以处理许多并行请求-我不确定该限制是多少,但是当超出限制时,它将对请求进行排队(假设您应该异步使用它)。我已经成功快速地向其抛出了十几个或更多的异步请求,而不必担心有多少未完成的请求。 (3认同)
  • 如果是单例,是否可以并行处理两个或多个api请求? (2认同)