ホームページ > 記事 > ウェブフロントエンド > 全能の WebView (2) WebView_html/css_WEB-ITnose で HTML Web ページのリソースを高速化する
最近、携帯電話のトラフィックを使用しているときに、WebView でページがすぐに読み込まれないのですが、静的ファイルを SD カードにキャッシュして、次回この Web ページにアクセスできますか。 ? このとき、最後にキャッシュされた静的ファイルを SD カードからドラッグすると、トラフィックが節約されるだけでなく、読み込み速度も向上します。小さなテストを書いてみましょう (js をアセットに配置します)~
API 11 から、この種の問題を解決するために shouldInterceptRequest が導入されました。このメソッドは、Load からアプリに通知できます。指定されたリソースをネットワークからロードするのではなく、ローカルにロードします。
WebView は、ネットワークにリクエストを返し、応答データを返します。その後、 shouldInterceptRequest メソッドを呼び出して、アプリが提供するローカル データを使用して、WebView がネットワーク データを独自にロードする方法を置き換えます。 WebResourceResponse では、MIME タイプとエンコード形式を指定する必要があります。
webview.setWebViewClient(new WebViewClient() { { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { return replaceJs(view, url); } }); protected WebResourceResponse replaceJs(WebView view, String url) { if (url.startsWith("http://img1.cache.netease.com/f2e/lib/js/ne.js")) { return new WebResourceResponse("text/html", "utf-8", FileTool.streamFromAsset(this, "js/hlct-com.js")); } else { return null; } }public class FileTool { public static InputStream streamFromAsset(final Context ctx, final String file) { try { return ctx.getAssets().open(file); } catch (Exception ignored) { } return null; }}
上記のコードを使用すると、WebView 内の js リソースを置き換えることができます。ただし、Web ページを開く速度を速くすると、アプリの APK パッケージのサイズも大きくなります (リソースはローカルに配置されます)。時間に対するスペース (スペースに対する時間) の選択はユーザー次第です。