私のアプリでは、Webビューに外部URLのリストを読み込んでおり、ユーザーがそれらをめくることができるようにしています。 Webビューはビューフリッパーにロードされます。 webviewのロードURLのパフォーマンスが本当に悪いことがわかりました。フレームレイアウトの使用から、ロードするWebビューの数の制限まで、すべてを試しました。それでも性能は満足のいくものではありません。
Webビューのパフォーマンスを最適化するにはどうすればよいですか?これは一般的な使用法です。明らかな何かが欠けていますか?.
私のWebview設定は-
webView.setInitialScale(WEBVIEW_SCALE);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.setWebViewClient(new MyWebViewClient());
webView.setOnTouchListener( new OnTouchListener());
これを試して:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
次のことが最も効果的だと思います。
if (Build.VERSION.SDK_INT >= 19) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
else {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
Android 19には、WebView用のChromiumエンジンが搭載されています。ハードウェアアクセラレーションの方がうまくいくと思います。
これについては、ここですでに説明しました。 webViewのパフォーマンスを向上させます(ネイティブWebブラウザーと同じパフォーマンスにする必要があります)
私は同様の問題に遭遇し、いくつかの重いデバッグの後、ネイティブブラウザとWebViewブラウザが異なるキャッシュを使用しているように見えることに気づきました。
このコードを使用してWebViewキャッシュを無効にし、WebViewをはるかに高速にしました(ただし、キャッシュしないという犠牲を払っています)。プライベートAPIを使用しているため、これを使用すると、将来のリリースでコードが破損するリスクがあることに注意してください。
try
{
Method m = CacheManager.class.getDeclaredMethod("setCacheDisabled", boolean.class);
m.setAccessible(true);
m.invoke(null, true);
}
catch (Throwable e)
{
Log.i("myapp","Reflection failed", e);
}