Como baixar vários arquivos simultaneamente usando o intentservice no Android?
Eu quero criar um serviço semelhante a este (referência deAqui), para baixar vários arquivos de forma assíncrona no Android.
public static class DownloadingService extends IntentService {
public static String PROGRESS_UPDATE_ACTION = DownloadingService.class
.getName() + ".newDownloadTask";
private ExecutorService mExec;
private CompletionService<NoResultType> mEcs;
private LocalBroadcastManager mBroadcastManager;
private List<DownloadTask> mTasks;
public DownloadingService() {
super("DownloadingService");
mExec = Executors.newFixedThreadPool( 3 ); // The reason to use multiple thread is to download files asynchronously.
mEcs = new ExecutorCompletionService<NoResultType>(mExec);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent intent) {
while(true)
{
if( cursor <= totalDownloadQueue.size() -1) { //totalDownloadQueue is a static ArrayList which contains numerous DownloadTask
mEcs.submit(totalDownloadQueue.get(cursor));
cursor++; // The variable cursor is also a static int variable.
}
}// continuously observing the totalDownloadQueue. If any download item is added. Then the thread are dispatched to handle that.
mExec.shutdown();
}
O usuário pode selecionar itens de download entrelistview
em diferentes fragmentos. Minha estratégia é que, conforme o usuário selecione os itens e pressione o botão de download, esses itens sejam passados paraDownloadTask
responsável por baixar um arquivo. Em seguida, as tarefas de download são adicionadas aototalDownloadQueue
.
Aqui estão algumas perguntas:
Eu conheço ointentservice
é acionado por alguma ação definida. Mas o que eu quero é criar um serviço de segundo plano assistindo aototalDownloadQueue
, se houver algum novodownloadtask
está disponível, então alguns threads são chamados para operar as tarefas.
Qual é o efeito colateral se eu fiz isso para este personalizadointentservice
?
Que classe alternativa devo usar? Por favor, providenciesample code
junto com a explicação, obrigado.
Como eu sei, a inicialização dos threads é chamada apenas uma vez. Se eu iniciar o serviço no início do aplicativo e os encadeamentos forem eliminados quando o usuário encerrar o aplicativo (quero dizer quando eleswipe out
a janela.) Os threads existem depois que o usuário sai do aplicativo?
Se essa abordagem ainda não conseguir resolver o problema de baixar arquivos de forma assíncrona? Que outra estratégia devo adotar? Forneça algum código ou referência de exemplo para que eu possa modificá-lo.
Passei 7 dias lidando com a exigência complexa, qualquer ajuda, por favor!