httpurlconnection è molto lento su Android 4.2

Posso connettersi con successo, submit e ricevere i dati utilizzando httpurlconnection. Ma ci vuole molto tempo per caricare tutti i dati sul mio telefono (Samsung s4, 4.2) e su android 4.2 emulatore. Ma ci vogliono quasi 1-2 secondi (che è molto veloce) per caricare foto su Android 2.3.x emulatore. Più veloce della mia galassia s4 sulla connessione http.

Sto utilizzando AsyncTask e il mio codice funziona bene su entrambi. È solo lento su android 4.2s. Ho provato a rimuovere chunkedStreaming, mantenere vivo, cambiare i valori di timeout, ecc., Ma ancora nessun successo

  • Laboratorio di test remoto (RTL) per Android
  • Visualizzazione Web in RelativeLayout creato in modo programmato
  • onDestroy () - per impostare o non impostare le variables di istanza in null?
  • Creazione di linee orizzontali e verticali in android
  • Android IAB. Errore - È necessaria l'authentication. Devi accedere al tuo account Google
  • Spegni la messa a fuoco automatica in android
  • Ecco il mio codice

    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(); 

    Ci sono delle differenze tra httpurlconnections 4.2 e 2.3.x? Che cosa c'è di sbagliato qui

    AGGIORNARE!

    Ho provato utilizzando Log.e () per vedere quale linea impiega più tempo.

     ///// 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"); 

    Tra 3 e 4, 5-6 secondi passa sulla linea

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

    AGGIORNARE!!

    Quel tempo di attesa (vedi aggiornamento precedente) è correlato all'URLConnection.setConnectTimeout (6000);

    Quando faccio Timeout 1000, allora le risposte di connessione in fretta (in attesa di 1 secondo per la linea)

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

    Non c'è idea di come sta succedendo

  • come get un'area selezionata che copre da canvas in android
  • come aggiungere il supporto linguistico a android
  • ActionBar con layout personalizzato non occupa la width dello schermo su Android 4.4.2 (KitKat)
  • Recupero di gruppo di particolare contatto
  • Imansible accedere al valore modificato della variabile da un'altra class nello studio android
  • Risorsa Android per un prodotto specifico
  • 2 Solutions collect form web for “httpurlconnection è molto lento su Android 4.2”

    Impostare urlConnection.setConnectTimeout () in un timeout più basso.

    La documentazione di class per URLConnection.setConnectTimeout () dice:

    Imposta il tempo massimo in millisecondi per attendere durante la connessione. La connessione a un server non riuscirà con un SocketTimeoutException se il timeout trascorre prima di stabilire una connessione. Il valore predefinito di 0 ci port a fare una connessione di block. Ciò non significa che non ci ritorneremo mai, ma probabilmente significa che avrai un timeout TCP dopo alcuni minuti.

    Avviso: se il nome host risolve più indirizzi IP, questo client proverà ciascuno nell'ordine RFC 3484. Se la connessione a ciascuno di questi indirizzi non è rioutput, più timeout trascorrerà prima che il tentativo di connessione crei un'exception. I nomi host che supportno sia IPv6 che IPv4 hanno sempre alless 2 indirizzi IP.

    Originariamente ho impostato il mio set su urlConnection.setConnectTimeout(30000); e quindi modificato in urlConnection.setConnectTimeout(1000) . Immediatamente ho visto risultati più rapidi.

    Spero che questo ti aiuti!

    Hai menzionato che stai utilizzando AsyncTask , stai cercando di eseguire diverse attività allo stesso tempo?

    Se questo è il caso, dovresti essere consapevole che, a partire da Android 4.0, AsyncTasks sono serializzati per impostazione predefinita. Ciò significa che l'esecutore eseguirà una attività alla volta .

    Se si desidera mantenere il comportmento precedente, è ansible utilizzare il seguente elemento di costruzione:

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

    Vedi questo post sul blog per ulteriori informazioni:
    http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.