Java/Android - взаимодействие со сторонним классом - вопрос от новичка

JAVA*
Практикуюсь в программировании на Java для Android.
Встал вопрос, который не могу корректно решить и хочу услышать ваш совет.

Пример упрощен, но суть следующая — пишу программу для Android, которая получает список ссылок с сервера и скачивает их на телефон, вот два класса, которые используются для загрузки:

public class Download {

  public long getTotal() {
    return total;
  }

  protected void setTotal(long total) {
    this.total = total;
  }

  private long total = 0;

  public boolean download(String link, String path) throws IOException {

    // download the file
    InputStream input = new BufferedInputStream(url.openStream());
    OutputStream output = new FileOutputStream(outputFile);

    int count = 0;
    byte data[] = new byte[1024];

    while ((count = input.read(data)) != -1) {
      this.setTotal(this.getTotal() + count);
      output.write(data, 0, count);
    }

    return true;
  }
}

public class DownloadBatch {

  public boolean download(ArrayList<String[]> tasks) throws IOException {
    
    Download loader = new Download();
    
    for (String[] task : tasks) {
      loader.download(task[0], task[1]);
    }

    return true;
  }
}


* This source code was highlighted with Source Code Highlighter.


Класс Download скачивает файл с указанного адреса в указанное место, класс DownloadBatch позволяет скачивать пакетно используя класс Download.
Приложение использует только класс DownloadBatch, процесс загрузки пусть отображается в ProgressDialog в формате — имя загружаемого файла/сколько скачано.

Каким образом отображать эту информацию в реальном времени в ProgressDialog?
Главный нюанс — классы Download и DownloadBatch править нельзя.

В голову пришли только две идеи:
  1. Юзать АОП, к примеру с помощью AspectJ
  2. Написать класс, объект которого будет периодично опрашивать класс DownloadBatch


Я не уверен, что это лучшие варианты и хотел бы узнать мнение более опытных людей — как лучше поступать в таких ситуациях.
6 февраля в 21:04
KOS_MOS 12,4

отсортировано по дате по оценке
ответы (1)

+1
anmipo #
Если классы Download и DownloadBatch изменять нельзя — то никак, потому что состояние прогресса знает только loader, объявленный в DownloadBatch.download() и не существующий вне этого метода.

Если всё же код можно менять, можно адаптировать пример из этой статьи: "Процессы и потоки в Android: пишем AsyncTask правильно" (только почитайте комментарии).
Спасибо за ссылочку — почитаю.
А если доступ к классу Download есть — к примеру, объект класс DownloadBatch будет хранить ссылку на него в свойстве класса?
KOS_MOS, 7 февраля в 17:44
Ну тогда да, периодически опрашивать из другого потока и обновлять прогресс-диалог. anmipo, 7 февраля в 21:47

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.