Производительность Android WebView - PullRequest
16 голосов
/ 02 ноября 2010

В моем приложении я загружаю список внешних URL-адресов в веб-просмотре и позволяю пользователю пролистывать их.Веб-просмотры загружаются в флиппер.Я считаю, что производительность в URL загрузки веб-браузера действительно плохая.Я перепробовал все: от использования структуры фрейма до ограничения количества загружаемых веб-просмотров.Тем не менее, производительность неудовлетворительная.

Как оптимизировать производительность веб-просмотра?Это должно быть общее использование.Я что-то упускаю из виду.

Мои настройки веб-просмотра -

    webView.setInitialScale(WEBVIEW_SCALE);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(false);
    webView.setWebViewClient(new MyWebViewClient());    
    webView.setOnTouchListener( new OnTouchListener());

Ответы [ 3 ]

4 голосов
/ 27 февраля 2014

Попробуйте это:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
} else {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
2 голосов
/ 09 сентября 2015

Я думаю, что лучше всего работает следующее:

if (Build.VERSION.SDK_INT >= 19) {
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}       
else {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

В Android 19 есть механизм Chromium для WebView.Я думаю, это работает лучше с аппаратным ускорением.

Для получения дополнительной информации Android 4.4 KitKat, браузер и Chrome WebView

1 голос
/ 23 августа 2011

Это уже обсуждалось здесь: Повышение производительности веб-просмотра (должно быть таким же, как и у собственного веб-браузера)

Я столкнулся с подобной проблемой, и после некоторой тяжелойпри отладке было замечено, что собственный браузер и браузер 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...