Как скачать изображения в фоновом режиме в j2me? - PullRequest
1 голос
/ 08 декабря 2011

У меня есть одно полотно, где я показываю одно изображение в центре. Это изображение загружено по URL. На самом деле нужно загрузить больше изображений, это означает, что если пользователь нажимает ПРАВО, я должен показать следующее изображение, если ЛЕВОЙ, я должен показать еще одно изображение с обратной стороны. У меня есть массив строк, которые хранят изображения URL. Я хочу загрузить предыдущее и следующее изображение в фоновом режиме. Как это сделать?

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

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

  1. Что, если изображение велико по сравнению с размером холста устройства?То есть размер изображения w * h очень высок по сравнению с холстом w * h?
  2. Могут ли устройства с малой памятью загружать такие большие изображения?
  3. Несогласованная многопоточная модель на разных устройствах.То есть, на некоторых устройствах это позволит вам создать 10 потоков, в то время как в других оно остановится на уровне 2.
  4. Может ли мое приложение поддерживать тип изображения для извлечения?То есть я загружаю .JPG / .GIF, но мое устройство не поддерживает его.
  5. Как кэшировать изображения?Хотите ли вы загружать одно и то же изображение снова и снова при переходе к этому изображению?
  6. Использую ли я TCP / HTTP / RMI для загрузки содержимого изображения?
  7. Будет ли этот код переносимым между различнымиJVM для JavaME?

, и список продолжается .....

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

interface NetworkIoItem {
     Object sourceComponent;

     public void onImageDownload(Image image) {
           //Trigger the source 
     }
}

.

class NetworkIoManager extends Threads {
     Vector pendingRequestQueue;

     :
     :

     public void run() {
           //Wait on the pending request queue

           //Process all the elements in pending request queue
           //and again wait on this queue
     }
}

.

class CacheManager {
     Vector cachedContent;

     public boolean checkIfCached() {
          //Check in the cachedContent whether
          //this image exists if so return true;
     }

     public Image fetchImage() {
          //Check if the image is cached
          //if so return this cached image

          //else push a NetworkIoItem object to 
          //NetworkIOManager pending queue
     }
}

Теперь для каждого изображения (текущего, левого илиправильно) вызовите CacheManager.fetchImage(), этот метод позаботится о том, чтобы изображение было кэшировано или загружено с сервера.В том же методе, если изображение не кэшируется, оно добавит NetworkIoItem objbect к NetworkIoManager pendingQueue и загрузит его.По завершении загрузки активируется метод NetworkIoItem.onImageDownload(...).

Для загрузки изображения в NetworkIoManager

можно использовать функцию J2ME Polish's Touch . Используя этот подход, вы будете выполнять асинхронную выборку изображений для URL запроса.

0 голосов
/ 08 декабря 2011

Сделай что-то вроде ..

Thread t = new Thread(new Runnable(){
  public void run() {
    // Your code to download image here as you were doing earlier,
    // for previous and next image
  }
});

t.start();
...