#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.