2011-02-05 10 views
5

Quindi ho bisogno di caricare più immagini su un server web. Ho creato il metodo di caricamento. Ora ho bisogno di un modo per fare una coda di upload in modo da poter gestire e cancellare i caricamenti. Qual è il modo migliore per fare qualcosa di simile? Farò sicuramente un servizio per questo. Stavo controllando la classe IntentService e mi sembra un buon modo per fare la coda (dato che ho solo bisogno di caricare 1 file alla volta), ma il mio caricamento sarà composto da 3 parti, la prima parte che chiamerò un server per ottenere l'autorizzazione, il secondo sarà il caricamento effettivo e il terzo invierà una conferma che il file è stato inviato correttamente.Creazione di una coda di caricamento

Ok, ecco l'accordo. Come si annulla uno specifico download in coda? Come rimandare la distruzione del servizio se il processo si trova nella terza parte del caricamento (postando le informazioni di successo sul caricamento in un servizio web)?

risposta

3

Come si annulla uno specifico download in coda?

Con IntentService, non è così. Dovresti scrivere il tuo Service che si comporta come IntentService (thread in background, coda di lavoro, stopSelf() quando la coda è vuota), ma dove puoi gestire meglio la coda.

Come faccio a rinviare la distruzione del servizio se il processo è nella terza parte del caricamento

Se si utilizza IntentService o il proprio IntentService -workalike, il servizio non sarà normalmente distrutto fino a quando non c'è più lavoro da fare.

Se sei preoccupato per Android che interrompe il servizio perché pensa di essere rimasto in memoria troppo a lungo, utilizza startForeground().

+0

Ok. chiaro. c'è qualche esempio che mi può aiutare su come posso creare un servizio come descrivi? – DArkO

+0

@DArkO: Non ho nulla che corrisponda abbastanza. – CommonsWare

+0

ok. non è un problema. sei stato di grande aiuto finora in ogni caso. Grazie. – DArkO

0

Da API 11 in su, un buon approccio è utilizzare un FixedThreadPool con compiti asincroni. Fare una volta:

ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

Dove 3 è il numero di download che si desidera eseguire contemporaneamente. Sarà queueu l'attività se ci sono già 3 download in esecuzione e gestire automaticamente l'attività in un secondo momento. Avviare le attività asincrone con:

yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

Parametri è probabilmente l'URL che si desidera connettersi. Puoi leggerlo nella onPostExecute del tuo asynctask e collegarti al server usando un HttpURLConnection.

assicuratevi di chiamare giù questo su arresto:

threadPoolExecutor.shutdown() 
Problemi correlati