Как загрузить несколько файлов одновременно, используя intentservice в Android?
Я хочу создать сервис, похожий на этот, (ссылка отВот), чтобы загрузить несколько файлов асинхронно в 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();
}
Пользователь может выбрать элементы загрузки средиlistview
в разных фрагментах. Моя стратегия заключается в том, что, когда пользователь выбирает элементы и нажимает кнопку загрузки, эти элементы передаются вDownloadTask
который отвечает за загрузку файла. Затем задачи загрузки добавляются вtotalDownloadQueue
.
Вот несколько вопросов:
Я знаюintentservice
запускается определенным действием. Но я хочу создать фоновый сервис для просмотраtotalDownloadQueue
если есть новыеdownloadtask
доступно, затем вызывается некоторый поток для выполнения задач.
Что побочный эффект, если я сделал это для этого подгонятьintentservice
?
Какой альтернативный класс я должен использовать? Пожалуйста предоставьтеsample code
вместе с объяснением, спасибо.
Как я знаю, инициализация потоков вызывается только один раз. Если я запускаю службу в начале приложения, и потоки должны быть уничтожены, когда пользователь завершает приложение. (Я имею в виду, когда онswipe out
окно.) Существуют ли потоки после выхода пользователя из приложения?
Если этот подход все еще не может решить проблему с асинхронной загрузкой файлов? Какую другую стратегию я должен принять? Пожалуйста, предоставьте пример кода или ссылку, чтобы я мог изменить его.
Я потратил 7 дней, чтобы разобраться со сложным требованием, любая помощь, пожалуйста!