2016-01-14 15 views
11

La mia applicazione dipende fortemente dal componente Android DownloadManager per scaricare file con dimensioni approssimative di 3-10 mega byte.DownloadManager - comprensione ERROR_HTTP_DATA_ERROR

quando scaling up (a milioni di download) il quadro generale è chiaro:

~ 50% di tutti i download non riescono a causa diERROR_HTTP_DATA_ERROR.

sto ricevendo queste informazioni da Google Analytics

in base alla documentazione, questo codice di errore significa:

Valore di COLUMN_REASON quando un errore di ricezione o l'elaborazione dei dati si è verificato a livello HTTP.

Ho trovato questa documentazione non molto informativa.
ci sono un sacco di errori http là fuori.

e che dire della disconnessione della rete nel mezzo del download? fa scattare anche l'errore ERROR_HTTP_DATA_ERROR dopo aver fallito tutti i tentativi di riprovare del gestore del download?

Sarebbe bello se qualcuno potesse aiutarmi a capire:

  • c'è un modo per ottenere da DownloadManager ulteriori informazioni sull'errore esatto http?
  • quali sono le situazioni più comuni ERROR_HTTP_DATA_ERROR può essere licenziato dal download manager?

un altro punto che vale la pena menzionare: mentre questo errori maturati - l'utente è connesso alla rete Wi-Fi (sto impostando download manager per scaricare solo tramite WiFi)

per favore non mi suggeriscono di non usare gestore di download a tutti. Conosco questa opzione, vantaggi e svantaggi. Sto salvando questa opzione come ultima risorsa.

+0

Hai qualche output di logcat catturato con questo errore? –

+0

no, io no. perché sto ricevendo questi errori da altri utenti tramite Google Analytics. –

+0

Sì, ho capito, speravo potessi avere alcuni registri di test. Sto scrivendo una risposta. –

risposta

4

Guardando il Source of DownloadManagerERROR_HTTP_DATA_ERROR viene restituito con un metodo getErrorCode(int) questa è la linea esatta:

  case Downloads.Impl.STATUS_HTTP_DATA_ERROR: 
      return ERROR_HTTP_DATA_ERROR; 

android.provider.Downloads ha gli stati che sono mascherati qui con propri costanti DownloadManager di classe, nella sua source:

public static final int STATUS_HTTP_DATA_ERROR = 495; 

Ora devi scoprire quali sono le cause dell'errore HTTP 495. Dopo aver cercato su Google un po ', sono venuto a sapere che questo codice di errore è solo relativo a Google e viene spesso prodotto durante il download di app dal playstore.

Un fix suggested-Go to Settings - Apps- All- Download manager and Clear data.

Quindi, in conclusione della mia ricerca limitata, penso che la sua un sottostante problema relativo DownloadManager implementazione piuttosto che qualche problema di rete o un server, e dal momento che nessuna soluzione definitiva/soluzione è disponibile (i miei amici anche di fronte a una situazione simile) dovresti provare altre alternative.

+0

Posso vedere nel codice sorgente (riga 435) che questo codice di stato può essere generato quando c'è IOException: https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/master/src/ com/android/providers/downloads/DownloadThread.java –

+0

@downvoter cura di commentare che cosa non va nella mia risposta? Non è una soluzione completa, ma ci ho messo i miei sforzi per ottenere almeno qualcosa. –

+0

Non capisco anche chi ha votato e perché. –

6

quali sono le situazioni più comuni ERROR_HTTP_DATA_ERROR possono essere attivate dal download manager?

Senza vedere alcun codice, è probabile che funzioni. From the docs:

Se si è verificato un errore HTTP, questo terrà il codice di stato HTTP come definito nella RFC 2616.

Questo vi darà un errore HTTP standard da cui si può trovare un 6.1.1 Status Code and Reason Phrase. Se stai avendo milioni di download, e questi sono da una serie limitata di siti, questo potrebbe essere un problema che va oltre la tua app, poiché i server del sito web potrebbero non essere in grado di gestire il traffico.

e che dire della disconnessione della rete nel mezzo del download?

Problemi di connettività Internet;

"408" ; Section 10.4.9: Request Time-out 

fa si innesca anche l'errore ERROR_HTTP_DATA_ERROR dopo aver fallito tutto il manager del scaricare tentativi dopo?

Possibilmente. Per poter generare questo tipo di errore, deve essere un problema con l'app che comunica e/o sta tentando di/o terminare il download sul sito.

c'è un modo per ottenere da DownloadManager ulteriori informazioni sull'esatto errore http?

parte l'utilizzo di prova e le catture e la registrazione degli errori nei metodi in questione, qualora la vostra applicazione utilizza il DownloadManager, e poi prova e in attesa del logcat quando si ottiene questo errore, l'altra opzione sarebbe quella di utilizzare a distanza di una libreria o strumento di terze parti per ottenere la registrazione degli errori e rapporti sugli arresti anomali della tua applicazione distribuita.

Ci sono molti servizi e librerie di terze parti che offrono questo, sto usando una delle rinomate librerie open source come esempio.

Come per l'errore online e la registrazione degli arresti anomali, ACRA è open source e fornisce questa funzionalità. Utilizzato per utilizzare i prodotti Google per archiviare i rapporti liberamente, ma con l'aumentare dell'utilizzo, Google ha ritirato questo supporto, tuttavia esistono funzionalità offerte da ACRA e altri provider oppure è possibile gestire i propri report, ma ciò può comportare costi.

L'implementazione di questo è all'interno del codice dell'app è relativamente semplice, creando una classe che si aggancia all'app estendendo la classe dell'applicazione e avviandosi con l'applicazione.

import org.acra.*; 
import org.acra.annotation.*; 

@ReportsCrashes(
    formUri = "http://www.backendofyourchoice.com/reportpath" 
) 
public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 

     // The following line triggers the initialization of ACRA 
     ACRA.init(this); 
    } 
} 

Avrete anche bisogno di configurare la segnalazione back-end, e ci sono i dettagli forniti su come fare questo, come le opzioni diventano aumentato. Maggiori dettagli possono essere trovati qui, BasicSetup.

Questo blog da The Cheese Factory offre una vista dettagliata di impostare e altre opzioni per errore in linea la segnalazione How to setup ACRA, an Android Application Crash Tracking system, on your own host Application Crash Reports on Android

Questo significherà un aggiornamento per la vostra applicazione, ma si sta andando ad avere a che fare questo comunque da i suoni di esso.

+1

Hmm, buona spiegazione.goodjob – Mohsen

+1

@ LinX64 grazie mille! : D –

2

È difficile dire esattamente qual è il motivo dell'errore che si sta verificando. Il codice di errore che stai ricevendo è troppo generico.

cose che vorrei fare al fine di risolvere il problema:

  1. provare a vedere se non v'è alcuna correlazione tra il carico del server o l'attività del server e il numero di errori di download. Ciò contribuirebbe a determinare se il problema ha origine nel server. In tal caso, è possibile aumentare le risorse sul lato server o cercare di ridurre il carico sui server per ridurre al minimo i problemi relativi al download. Carichi pesanti del server o un numero elevato di download simultanei possono causare problemi come quello che si sta verificando (strozzature, timeout, risorse bloccate sul lato server, ecc.).

  2. Se si giunge alla conclusione che il problema riguarda il lato client, prenderei in considerazione la possibilità di sostituire il Gestore dei download di Android con un altro o di scrivere il codice vinto per scaricare i file.

Devo dire che l'offerta di Ms Yvette di aggiungere più registrazioni è importante. Lo faccio in tutte le mie app. Una volta pubblicate maggiori informazioni sul problema, saremo in grado di individuare il problema e risolverlo più rapidamente.