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

  • Para transferir el archivo de PC a Android dispositivo a través de usb
  • Android / Java: HttpURLConnection no devuelve los encabezados del archivo redirigido (por ejemplo, en S3)
  • Enviar una imagen codificada en base64 al servidor mediante HttpUrlConnection Android
  • Android HttpUrlConnection hace POST en lugar de GET
  • Android Http url conexión Lanzar archivo no encontrado Excepción en getInputstream
  • Cómo configurar el tipo de contenido en HttpURLConnection?
  • Usando HttpURLConnection y HttpsURLConnection para conectarse a un https?
  • HttpURLConnection de Android lanza EOFException en solicitudes HEAD
  • HttpURLConnection no descomprimir Gzip
  • HttpsURLConnection y conexiones intermitentes
  • ArrayList a DavidWebb Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.