Wie lade ich mit intentservice in Android mehrere Dateien gleichzeitig herunter?

Ich möchte einen ähnlichen Service erstellen (Referenz vonHie), um in Android mehrere Dateien asynchron herunterzuladen.

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

Der Benutzer kann Download-Elemente unter @ auswählelistview in verschiedenen Fragmenten. Meine Strategie ist, dass, wenn der Benutzer die Elemente auswählt und auf den Download-Button drückt, diese Elemente an @ übergeben werdeDownloadTask, das für das Herunterladen einer Datei verantwortlich ist. Dann werden die Download-Aufgaben in das @ eingefütotalDownloadQueue.

Hier sind einige Fragen:

Ich kenne dasintentservice wird durch eine definierte Aktion ausgelöst. Aber ich möchte einen Hintergrunddienst erstellen, der das @ beobachtetotalDownloadQueue, falls ein neuesdownloadtask ist verfügbar, dann werden einige Threads aufgerufen, um die Tasks auszuführen.

Was ist der Nebeneffekt, wenn ich dies für dieses angepassteintentservice?

Welche alternative Klasse soll ich verwenden? Geben Sie bittesample code zusammen mit der Erklärung, danke.

Wie ich weiß, wird die Initialisierung der Threads nur einmal aufgerufen. Wenn ich den Dienst zu Beginn der Anwendung starte und die Threads beendet werden sollen, beendet der Benutzer die Anwendung (ich meine, wenn erswipe out das Fenster.) Sind die Threads vorhanden, nachdem der Benutzer die Anwendung beendet hat?

Wenn dieser Ansatz das Problem des asynchronen Herunterladens von Dateien immer noch nicht lösen kann? Welche andere Strategie sollte ich annehmen? Bitte geben Sie einen Beispielcode oder eine Referenz an, damit ich Änderungen daran vornehmen kann.

Ich habe 7 Tage damit verbracht, mich mit der komplexen Anforderung zu befassen, bitte um Hilfe!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage