Загрузка изображений GWT для Canvas - PullRequest
4 голосов
/ 01 мая 2011

Без использования какой-либо библиотеки загрузки изображений, я загружаю изображения, как показано ниже:

final Image img = new Image();
img.setVisible(false);
RootPanel.get().add(img);
img.addErrorHandler(new ErrorHandler() {
    @Override
    public void onError(ErrorEvent event) {
        System.out.println(event);
    }
});
img.addLoadHandler(new LoadHandler() {
    @Override
    public void onLoad(LoadEvent event) {
        ImageElement data = ImageElement.as(img.getElement());
        RootPanel.get().remove(img);
        obj.setData(data);
        System.out.println("Arrived:" + (System.currentTimeMillis()-startTime) + "ms");
        render();
    }
});

без использования . RootPanel.get () добавить (IMG); изображение никогда не будет добавлено в DOM. Так что onLoad не будет срабатывать. Но если вы добавите изображение в DOM, если вы его не удалите, это приведет к утечке памяти.

Мои замечания по поводу вышеуказанного кода:

  1. Если я не добавлю изображение в DOM, обработчик загрузки не будет запущен.
  2. Если я это сделаю, но не удаляю после загрузки, произойдет утечка памяти.
  3. Я делаю и удаляю, Chrome будет вызывать сборщик мусора после 256 МБ. Firefox никогда не вызывал сборщик мусора. Так произошла утечка памяти. Может быть, Firefox вызовет сборщик мусора, когда это необходимо. Я не очень хорошо знаю эту проблему.

Мои вопросы: существуют ли процедуры загрузки изображений (библиотеки) для обработки изображений?
Они автоматически удаляют изображение из DOM после загрузки изображения?
Есть ли более подходящий способ решения этой проблемы, когда вы рисуете много изображений, но вам не требуется изображение после рисования?
Также существуют ли быстрые подходы для добавления и удаления изображений в / из DOM?

1 Ответ

1 голос
/ 03 мая 2011

Для загрузки изображений используйте com.google.gwt.widgetideas.graphics.client.ImageLoader

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

...