4

在不使用任何图像加载库的情况下,我正在加载如下图像:

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().add(img); 图像永远不会被添加到 DOM。所以不会触发onLoad。但是当你将图像添加到 DOM 中时,如果你不删除它,这将是内存泄漏。

我对上述代码的观察:

  1. 如果我不将图像添加到 DOM,则不会触发加载处理程序。
  2. 如果我这样做了,但加载后不删除,则会发生内存泄漏。
  3. 我这样做了,我确实删除了,Chrome 将在 256 MB 后调用垃圾收集。Firefox 从不调用垃圾收集。所以发生了内存泄漏。可能是 Firefox 会在需要时调用垃圾收集器。我不太了解这个问题。

我的问题是,是否有图像加载程序(库)处理图像加载?
加载图像后,它们会自动从 DOM 中删除图像吗?
有没有更合适的方法来处理这个问题,你正在绘制许多图像但在绘制后不需要图像?
还有快速的方法来添加和删除 DOM 中的图像吗?

4

1 回答 1

1

要加载图像,请使用 com.google.gwt.widgetideas.graphics.client.ImageLoader

一次加载大量图像。

于 2011-05-02T21:44:59.957 回答