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 に追加したり、DOM から削除したりするための高速な方法はありますか?

4

1 に答える 1

1

画像を読み込むには、com.google.gwt.widgetideas.graphics.client.ImageLoader を使用します

一度に大量の画像をロードします。

于 2011-05-02T21:44:59.957 に答える