Httpurlconnection es muy lento en Android 4.2

Puedo conectar con éxito, enviar y recibir datos usando httpurlconnection. Pero se tarda mucho tiempo en cargar todos los datos en mi teléfono (Samsung s4, 4.2) y en el android 4.2 emulador. Pero se tarda casi 1-2 segundos (que es muy rápido) para cargar imágenes en Android 2.3.x emulador. Más rápido que mi galaxia s4 en la conexión http.

Estoy utilizando AsyncTask y mi código funciona bien en ambos. Es sólo lento en android 4.2s. He intentado eliminar chunkedStreaming, mantener vivo, cambiar los valores de tiempo de espera, etc, pero aún no éxito

Aquí está mi código

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("POST"); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setUseCaches(false); urlConnection.setChunkedStreamingMode(0); urlConnection.setRequestProperty("Connection", "Keep-Alive"); urlConnection.setConnectTimeout(6000); urlConnection.setReadTimeout(6000); urlConnection.setRequestProperty("Content-Type", "multipart/form-data;charset=UTF-8;boundary="+boundary); urlConnection.connect(); 

¿Hay alguna diferencia entre httpurlconnections de 4.2 y 2.3.x? Que esta mal aqui

¡ACTUALIZAR!

He probado utilizando Log.e () para ver qué línea toma más tiempo.

 ///// other staff ////...... Log.e("HTTP","3"); if (isCancelled()) return (null); // don't forget to terminate this method Log.e("HTTP","3"); //Output DataOutputStream outputStream = new DataOutputStream( urlConnection.getOutputStream() ); //Send Passcode Log.e("HTTP","4"); 

Entre 3 y 4, pasa 5-6 segundos en la línea

 DataOutputStream outputStream = new DataOutputStream( urlConnection.getOutputStream() ); 

¡¡ACTUALIZAR!!

Ese tiempo de espera (véase la actualización anterior) está relacionado con urlConnection.setConnectTimeout (6000);

Cuando hago Timeout 1000, entonces las respuestas de la conexión rápidamente (esperar 1 segundo para la línea)

 DataOutputStream outputStream = new DataOutputStream( urlConnection.getOutputStream() ); 

No sé por qué está pasando esto

Establezca urlConnection.setConnectTimeout () en un tiempo de espera inferior.

La documentación de clase para URLConnection.setConnectTimeout () dice:

Establece el tiempo máximo en milisegundos para esperar mientras se conecta. La conexión a un servidor fallará con SocketTimeoutException si el tiempo de espera transcurre antes de que se establezca una conexión. El valor predeterminado de 0 nos obliga a realizar una conexión de bloqueo. Esto no significa que nunca vamos a tiempo, pero probablemente significa que obtendrá un tiempo de espera TCP después de varios minutos.

Advertencia: si el nombre de host se resuelve a varias direcciones IP, este cliente intentará cada uno en la orden RFC 3484. Si se produce un error en la conexión a cada una de estas direcciones, transcurren varios tiempos de espera antes de que el intento de conexión arroje una excepción. Los nombres de host que admiten IPv6 e IPv4 siempre tienen al menos 2 direcciones IP.

Originalmente tenía el mío establecido en urlConnection.setConnectTimeout(30000); Y luego lo cambió a urlConnection.setConnectTimeout(1000) . Inmediatamente, vi resultados más rápidos.

¡Espero que esto ayude!

Usted mencionó que está utilizando AsyncTask , ¿está tratando de ejecutar varias tareas al mismo tiempo?

Si ese es el caso, debe tener en cuenta que a partir de Android 4.0, AsyncTasks se serializan de forma predeterminada. Eso significa que el ejecutor ejecutará una tarea a la vez .

Si desea conservar el comportamiento anterior, puede utilizar la siguiente construcción:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { myTask.execute(); } 

Vea esta entrada del blog para más información:
http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html

  • httpUrlConnection no devuelve la respuesta en caché cuando el servidor devuelve HTTP_NOT_MODIFIED
  • Android: solicitud de revisión de Volley HTTP
  • Reutilizando HttpURLConnection para mantener la sesión viva
  • Usando HttpURLConnection y HttpsURLConnection para conectarse a un https?
  • FileNotFoundException para HttpURLConnection en Ice Cream Sandwich
  • Evitar llamadas de método CONNECT no solicitadas desde HttpURLConnection
  • HttpUrlConnection configuración Rango en Android se ignora
  • SSLHandshakeException: Excepción de certificado utilizando HttpURLConnetion con Android 4.2.2
  • HttpURLConnection leyó InputStream dos veces
  • Cómo deshabilitar la búsqueda de WWW-Authenticate encabezado en 401 en HttpUrlConnection en Android?
  • Enviar una imagen codificada en base64 al servidor mediante HttpUrlConnection Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.