Как добавить задачу загрузки в мою запущенную службу?

#android #download #android-service

#Android #Скачать #android-сервис

Вопрос:

У меня есть служба, которая выполняет задачу загрузки, когда она загружает файл, как я могу добавить к ней другую задачу загрузки (другой файл)? Должен ли я вспомнить это: ? startService(serviceIntent);

Моя служба :

 public class downloadService extends Service {
    ...
}
  

Комментарии:

1. Создайте массив задач Asyn и выполните после завершения загрузки.

Ответ №1:

Вы можете сделать это с помощью AsyncTask Create Broadcast Receiver в службе, и всякий раз, когда вы хотите загрузить, вы можете передать ссылку, передав ее

Добавьте это в службу

 public class MyReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
    String url= intent.getStringExtra("DownloadUrl");
   // Call downloadmethod from here
 }
}
  

для регистрации получателя добавьте этот код в Service onCreate

 IntentFilter filter = new IntentFilter("com.demo.BroadcastReceiver");

MyReceiver myReceiver = new MyReceiver();
registerReceiver(myReceiver, filter);
  

и всякий раз, когда вы хотите загрузить, вы можете использовать этот код и отправлять широковещательные сообщения

 Intent intent = new Intent();
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.setAction("com.demo.BroadcastReceiver");
intent.putExtra("DownloadUrl", Url);
sendBroadcast(intent);
  

Ответ №2:

С моей точки зрения,

1) Вы должны организовать очередь загрузки, в которой будут храниться метаданные будущих файлов, например: URL, имя файла, папка для сохранения этого файла, состояние загрузки и т.д.
2) Вы должны создать класс downloadTask, который будет работать в фоновом потоке. В качестве входных данных этот класс должен использовать один элемент из очереди метаданных.
3) Вы должны создать ExecutorService внутри своей службы с помощью single thread pool Executor (по требованию вы можете изменить размер пула в соответствии с вашими потребностями) и выполнить DownloadTasks.
4) Также вы должны знать, когда ваша задача загрузки будет завершена. В этот момент вы должны извлечь элемент HEAD из очереди метаданных и запустить new downloadTask.