2

@ font-face / loadDataWithBaseURLを使用して、WebViewで独自のフォントを使用しています。動作しますが、パフォーマンスの問題に直面しています。「loadDataWithBaseURL」でWebViewの内容を変更するたびに、フォントが再読み込みされ、数秒かかります。

@ font-faceを無効にすると、パフォーマンスは完璧になります。

TTFはアセットに配置され、css/htmlは文字列から毎回一緒にロードされます。

キャッシュを使おうとしましたが、ストレージメモリ内のファイルを使用しているようですので、違いはないかもしれません。または多分私はそれを間違って使用しました...

    myWebView.getSettings().setDomStorageEnabled(true);
    String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
    myWebView.getSettings().setAppCachePath(appCachePath);
    myWebView.getSettings().setAppCacheMaxSize(1024*1024*20);
    myWebView.getSettings().setAllowFileAccess(true);
    myWebView.getSettings().setAppCacheEnabled(true);

助けてください。

より詳しい情報:

アプリケーションのメモリ使用量は、各ロードデータで増え続けます。

Androidバージョン2.3.5。

4

1 に答える 1

0

私はそれをかろうじて機能させる非常に醜い方法を見つけました。メモリ リークはまだいくらかありますが、以前ほどではありません。

WebView を削除し、以前に破棄せずに再度作成することで構成されます。

このようにして、フォントを覚えます!理由を聞かないでください、私には理解できません。

「ll1」は私​​の LinearLayout で、WebView は常に最後のビューです。

    LayoutParams lparams = myWebView.getLayoutParams();
    ll1.removeView(myWebView);
    myWebView = new WebView(myWebView.getContext());
    myWebView.loadDataWithBaseURL(null, text, "text/html", null, null);
    myWebView.setOnTouchListener(this);
    myWebView.setOnLongClickListener(this);
    myWebView.setLayoutParams(lparams);
    ll1.addView(myWebView);

おそらく、メモリリークは、オブジェクトを再作成する前に破棄したりnullにしたりしないためですが、これが適切な速度とメモリ使用量で動作させる唯一の方法です。

誰かがこの動作を説明するか、より良い解決策を提供してくれることを願っています。

于 2012-05-27T18:52:21.180 に答える