0

バージョン 1.1.1 の gwt-visualization を使用する MVP GWT 2.5.1 アプリがあります。私のビューには 2 つButtonの と a がありVerticalPanelます (プレゼンターは としてアクセスしますdisplay.getPanel())。1 つのボタンは に を追加し、もう 1 つのボタンはPieChartそれをVerticalPanel削除します。プレゼンターはPieChart参照を として保持するWidgetため、参照がいつ追加/削除されたかがわかります。に初期化されnullます。

クロムの開発ツールをチェックして、追加/削除コードが DOM リークを作成していないことを確認しました。しかし、PieChartが削除された後、その要素は切り離された DOM ツリーに残され、すべて赤で色分けされていました。Labelの代わりに a を使用して同じ追加/削除コードを試したところ、削除PieChart後に切り離された DOM ツリーは残りませんでした。

私の質問は次のとおりです。追加または削除するときに何か間違ったことをしていPieChartますか? おそらく gwt-visualization には、私が認識していない他の方法でこれを処理する方法がありますが、私の google-fu は答えを出すことができません。

プレゼンターの追加/削除コードは次のとおりです。

display.getAddChartButton().addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        if (widget == null) {
            Runnable onLoadCallback = new Runnable() {
                public void run() {
                    PieChart content = new PieChart(createTable(), createOptions());
                    // Label content = new Label("Content");
                    display.getPanel().add(content);
                    widget = content;
                }
            };
            VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
        }
    }
});
display.getRemoveChartButton().addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        if (widget != null) {
            display.getPanel().remove(widget);
            widget = null;
        }
    }
});

private AbstractDataTable createTable() {
    DataTable data = DataTable.create();
    data.addColumn(ColumnType.STRING, "Task");
    data.addColumn(ColumnType.NUMBER, "Hours per Day");
    data.addRows(2);
    data.setValue(0, 0, "Work");
    data.setValue(0, 1, 14);
    data.setValue(1, 0, "Sleep");
    data.setValue(1, 1, 10);
    return data;
}

private Options createOptions() {
    Options options = Options.create();
    options.setWidth(400);
    options.setHeight(240);
    options.setTitle("My Daily Activities");
    return options;
}
4

1 に答える 1

0

Google Chart API 自体にメモリ リークが発生していることを突き止めました。 チームはメモリ リークの問題を認識しています

于 2013-12-04T23:52:44.643 に答える