Android アプリケーションに WebView を実装しました (ドキュメントに従って)。ドキュメントが示すように、カスタム WebViewClient を使用し、shouldOverrideUrlLoading をオーバーライドして、新しいアクティビティでクリックされたリンクを表示します。
私が抱えている問題は、リンクがクリックされたことを示すメッセージをアプリケーションが受信するのに時間がかかることです (たとえば、shouldOverrideUrlLoading が呼び出されます)。一般に、それは 1 ~ 2 秒で発生します (ほとんど許容できません) が、場合によっては 10++ 秒かかります (!! まったく許容できません)。Android WebView のタッチ応答性に関するこのスレッドを読んで、固有の 300 ミリ秒の遅延があることを理解しましたが、私の遅延時間ははるかに悪いことに注意してください。また、レンダリング/スクロール速度は問題ではないことに注意してください (実際、WebView を驚くほど速くスクロールできます)。
私の最善の推測では、遅延はページ上の Javascript から来ているということですが、これをデバッグする方法や、私の疑いを確認する方法についても途方に暮れています! 多くの console.log() ステートメントを Javascript に挿入しましたが、あまり起こっていないので、これが問題である場合でも絞り込むのは非常に困難です。
このスレッドに従って、キャッシュを無効にすることも試みました。
WebView をインスタンス化するための私のコードは以下のとおりです。私の Android アプリの唯一のビューの WebView に注意してください。また、マニフェストでハードウェア アクセラレーションをオンにしています。
// the _web_view is inflated, etc...
_web_view.getSettings().setSupportZoom(false);
_web_view.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
_web_view.setWebChromeClient(new CustomWebChromeClient());
_web_view.getSettings().setJavaScriptEnabled(true);
_web_view.getSettings().setDomStorageEnabled(true);
_web_view.setWebViewClient(new CustomWebViewClient());
_web_view.loadUrl(url);
FWIW、カスタム chrome クライアントは次のとおりです。
public class CustomWebChromeClient extends WebChromeClient {
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.d("Javascript", cm.message() + " -- From line "
+ cm.lineNumber() + " of "
+ cm.sourceId() );
return true;
}
}
そして、カスタム Web ビュー クライアント...
public class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(view.getContext(), WebPopupActivity.class) ;
intent.putExtra("url", url);
MyApp.Singleton.startActivity(intent);
return true;
}
}
編集: 標準の Android 組み込みブラウザーで Web アプリをテストしたことにも注意してください。ラグは一切ありません。リンクをクリックするとリアルタイムで開きます。