Android: marco de red principal de Android

Con el desarrollo de Android hasta el presente, el marco de red se ha actualizado, y actualmente hay cuatro marcos maduros principales. Este artículo analiza brevemente los principios de implementación de los marcos principales. Para un uso específico, consulte el enlace que figura en el artículo.

Marco principal de Android

Retrofit

Okhttp

Voleo

AsyncHttpClient

Retrofit

Caracteristicas

  • Proxy dinámico
  • Adaptar objeto de llamada de conversión
  • Análisis de funciones, solicitud de red y conversión de datos.

Interfaz

 

public interface ApiService{
    
    // 与Rxjava结合使用
    @POST(NetUrl.HOME_URL)
    public Obserable<HttpResult<HomeResponse>> getHomeList(@BODY BodyRequest body);

    @GET(NetUrl.VERSION_URL)
    public Obserable<HttpResult<VersionResponse>> getVersionDetail();

    // 没有添加Call回调处理,直接返回Okhttp的Call
    @Get(NetUrl.USER_URL)
    public Call<HttpResult<UserResponse>> getUser(@Query("uid") long uid)
}

Principio

imagen

 

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Config.BASE_URL) // baseUrl 以/结尾
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 添加Call回调
            .addConverterFactory(GsonConverterFactory.create()) // 解析器
            .client(okHttpClient) //配置okHttpClient
            .build();

ApiService service = retrofit.create(ApiService.class);
// 在业务层调用ApiService的方法
service.getVersionDetail();

1. La retrofit.create(ApiService.class)actualización vincula la interfaz a Okhttp a través de un proxy dinámico

 

public <T> T create(final Class<T> service) {
...
    return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
        new InvocationHandler() {
            ...
            ServiceMethod<Object, Object> serviceMethod =
                (ServiceMethod<Object, Object>) loadServiceMethod(method);
            OkHttpCall<Object> okHttpCall = new OkHttpCall<>(serviceMethod, args);
            return serviceMethod.callAdapter.adapt(okHttpCall);
          }
        });
}

2. Mantener Okhttp internamente, Okhttp completa las solicitudes de red, Retrofit solo es responsable de la producción

3. Devolución de llamada de llamada, que en realidad es la devolución de llamada de Okhttp, correspondiente a la configuración .addCallAdapterFactory(RxJava2CallAdapterFactory.create()), si no existe dicha configuración, se devolverá el Call<Bean>objeto

4. El análisis de datos en el método de devolución de llamada de llamada corresponde a la configuración .addConverterFactory(GsonConverterFactory.create()). También puede ser Jsonfastuna fábrica de conversión de análisis o una fábrica de análisis personalizada. Solo necesita implementar la Retrofitinterfaz de análisis de datos dada. Puede consultar GsonConverterFactoryla implementación

Okhttp

Principio

La capa inferior de OkHttp es enviar solicitudes HTTP o HTTPS y recibir respuestas a través de Java Sockets, pero OkHttp implementa el concepto de agrupación de conexiones, es decir, para múltiples solicitudes desde el mismo host, puede compartir una conexión Socket en lugar de enviar solicitudes HTTP cada vez. Cierre el Socket subyacente para que se realice el concepto de grupo de conexiones. OkHttp encapsula la biblioteca OkIo utilizada para las operaciones de lectura y escritura de Socket.

imagen

Los protagonistas de OkHttp

OkHttpClient

Fábrica de llamadas, que se puede utilizar para enviar peticiones HTTP y leer sus respuestas.
Planta productora, responsable de las llamadas de producción

Solicitud

Solicitud OkHttp, Request.Builder().buildcreando y Request.Builder()configurando información de solicitud, como método de get/postsolicitud RequestBody, parámetros de solicitud, encabezado de solicitudheader

Llamada

El despachador, Call es la interfaz de nivel superior, y RealCall es responsable de la implementación específica. Responsable Requesty Responsepuente voluntad Requesten una execute()salida lleva a cabo de manera sincrónica Response, o Requestpara enqueue(callback)añadió de forma asíncrona a la programación.

Despachador (ThreadPoolExecutor)

La agrupación de subprocesos de programación Disptcher logra una alta concurrencia y un bajo bloqueo. Usando Deque como caché, la
tarea de ejecución de orden primero en entrar, primero en salir llama a la función finalizada en try / finalmente para controlar el orden de ejecución de la cola de tareas, en lugar de usar bloqueos, reduciendo la complejidad de codificación y mejorando el rendimiento
. Solo activa el trabajo de programación de Dispatcher.

Respuesta

Respuesta, incluida información como código, mensaje, encabezado, cuerpo, etc.

 

 

// 1.创建Client
OkHttpClient client = new OkHttpClient.Builder().build()
// 2.创建Request
Request reuqest = new Request.Builder().get().url(url).builder()
// 3.call execute同步
Response response = client.newCall(request).execute()
// 异步,回调在子线程中执行
client.newCall(request).enqueue(new Callback{
        @Override
        public void onFailure(Call call, IOException e){
        }
        @Override
        public void onResponse(Call call, Response response){
        }
    }) 

Voleo

imagen

RequestQueue

  • StringRequest
  • JsonRequest
  • ImageRequest

Hilo Diapatch

  • MainDispatcher
  • CacheDispatcher
  • NetworkDispatcher
  • ImageDispatcher

Obtener interfaz de datos

  • HttpStack
    procesa la solicitud Http y devuelve el resultado de la solicitud. Actualmente, Volley tiene HurlStack basado en HttpURLConnection y HttpClientStack basado en Apache HttpClient

  • ResponseDelivery (La interfaz de distribución de resultados devueltos, actualmente solo basada en ExecutorDelivery se distribuye en el hilo correspondiente al manejador de parámetros de entrada).

Datos

  • Caché (Volley usa DiskBasedCache basado en tarjeta sd por defecto)
  • Red (NetworkResponse)

Resumen

Obtenga continuamente solicitudes de RequestQueue a través de dos hilos de envío, llame a uno de los dos tipos de interfaces de adquisición de datos, caché o red, de acuerdo con si se ha almacenado en caché, obtenga los datos solicitados del caché de memoria o servidor, y luego entréguelos a ResponseDelivery para hacer la distribución de resultados y la devolución de llamada Tratar con

AysncHttpClient

Apache HttpClient utiliza la gestión de subprocesos asíncronos para administrar el subproceso de solicitud. El análisis principal no se realizará aquí. . .

Información marco / referencia de documento oficial

Retrofit

Okhttp

Código fuente de volley Análisis de volley

AsyncHttpClient



Autor: ReeseLuo
enlace: https: //www.jianshu.com/p/7a970db4e7cf
Fuente: libros de Jane
tienen derechos de autor por el autor. Para reproducción comercial, por favor contacte al autor para autorización, y para reproducción no comercial, por favor indique la fuente.

Publicado 7 artículos originales · 69 alabanzas · 200,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/u014320421/article/details/105217542
Recomendado
Clasificación