Скачать несколько файлов с помощью службы в Android - PullRequest
5 голосов
/ 27 августа 2011

В моем приложении есть много дополнительных данных, которые можно загрузить, поэтому я решил использовать Сервис для обработки всех загрузок в фоновом режиме, поэтому я начал изучать его и вот где я получил:

public class DownloadService extends IntentService{

    public DownloadService() {
        super("DownloadService");

    }

    @Override
    protected void onHandleIntent(Intent intent) {

        String URL=intent.getStringExtra("DownloadService_URL");
        String FileName=intent.getStringExtra("DownloadService_FILENAME");
        String Path=intent.getStringExtra("DownloadService_PATH");

        try{
        URL url = new URL(URL);
        URLConnection conexion = url.openConnection();

        conexion.connect();


        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new FileOutputStream(Path+FileName);

        byte data[] = new byte[1024];

        int count = 0;
        while ((count = input.read(data)) != -1) {
            output.write(data);
        }

        output.flush();
        output.close();
        input.close();

        }
        catch(Exception e){ }
    }

}

Код из основной деятельности:

        Intent ServiceIntent = new Intent(this,DownloadService.class);
        ServiceIntent.putExtra("DownloadService_URL", "the url...");
        ServiceIntent.putExtra("DownloadService_FILENAME", "Test1.rar");
        ServiceIntent.putExtra("DownloadService_PATH", "/sdcard/test/");
        startService(ServiceIntent);
  1. Правильно ли использован код для загрузки файлов? Я правильно использую Сервис?
  2. Я хочу загрузить много файлов .. Так стоит ли мне запускать службу для каждого отдельного URL?
  3. Я бы хотел проинформировать пользователя о проценте выполнения. Но у Сервиса нет пользовательского интерфейса. Должен ли я сделать это в панели уведомлений?

Спасибо.

1 Ответ

9 голосов
/ 27 августа 2011

Правильно ли использован код для загрузки файлов?

Мне не нравится использование конкатенации для создания полных путей к файлам (используйте соответствующий конструктор File). Поймать исключения и ничего с ними не делать - действительно плохая идея. На Android 2.3 и выше, вы должны рассмотреть возможность использования DownloadManager.

В остальном, это нормально для базовых вещей.

Я хочу загрузить много файлов .. Так стоит ли мне запускать службу для каждого отдельного URL?

Это должно работать нормально. Обратите внимание, что они будут загружаться по одному, поскольку IntentService имеет только один фоновый поток.

Я бы хотел проинформировать пользователя о проценте выполнения. Но у Сервиса нет пользовательского интерфейса. Должен ли я сделать это в панели уведомлений?

Это было бы одно решение. Вариантом может быть то, что служба отправит заказанную трансляцию, которая будет отслеживаться вашей деятельностью, если она все еще отображается на экране, или BroadcastReceiver, который будет выполнять Notification. Вот сообщение в блоге с подробностями об этом, а - это крошечный пример приложения , демонстрирующий концепцию.

...