Ниже приведены некоторые проблемы, которые необходимо учитывать для того, чтобы это требование работало на разных устройствах.
- Что, если изображение велико по сравнению с размером холста устройства?То есть размер изображения w * h очень высок по сравнению с холстом w * h?
- Могут ли устройства с малой памятью загружать такие большие изображения?
- Несогласованная многопоточная модель на разных устройствах.То есть, на некоторых устройствах это позволит вам создать 10 потоков, в то время как в других оно остановится на уровне 2.
- Может ли мое приложение поддерживать тип изображения для извлечения?То есть я загружаю .JPG / .GIF, но мое устройство не поддерживает его.
- Как кэшировать изображения?Хотите ли вы загружать одно и то же изображение снова и снова при переходе к этому изображению?
- Использую ли я TCP / HTTP / RMI для загрузки содержимого изображения?
- Будет ли этот код переносимым между различными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 запроса.