Я пишу приложение (J2ME MIDlet) с прокручиваемым изображением (используется для отображения карты). Фон карты состоит из нескольких плиток (созданных из большого файла JPG), которые я рисую на графическом объекте.
Я также использую кеш (Hashtable), чтобы не создавать каждый образ, когда он мне нужен. Я не храню все в памяти, потому что это было бы слишком много.
Проблема в том, что когда я прокручиваю карту и мне нужно изображение, которое не было кэшировано, его создание занимает около 60-80 мс. В зависимости от разрешения экрана, размера тайла и направления прокрутки, это может происходить несколько раз за одну операцию прокрутки (для разных тайлов). В моем случае часто случается, что это нужно сделать 4 раза, что приводит к задержке более 300 мс, что очень заметно.
Самым простым для меня было бы то, что есть какой-то способ ускорить создание образов, но я думаю, это просто желаемое за действительное ...
Кроме того, я полагаю, что наиболее очевидная вещь, которую нужно сделать, - это загружать тайлы с предсказанием (например, при прокрутке вправо, предварительно кэшировать тайлы вправо), но затем я сталкиваюсь с довольно сложной задачей придумать приличный алгоритм для этого.
Мой вопрос : как мне лучше всего выполнить эту прогностическую загрузку? Может быть, я мог бы переложить создание изображений в отдельный поток? Другие вещи, чтобы рассмотреть?
Заранее спасибо.
Достигнут некоторый прогресс, хотя он все еще не оптимален.
Добавление новой плитки в кеш теперь выполняется в отдельном потоке, и я просто рисую пустую плитку с одинаковыми размерами. Когда плитка будет создана и кэширована, она будет нарисована. Прямо сейчас это не произойдет до следующего перерисовки, хотя не должно быть трудно заставить перерисовку, как только плитка загружена (не знаю, будет ли это эффективно, протестируем).