Android: WebView и @ font-face, каждый раз перезагружает шрифт

1

Я использую @font-face/loadDataWithBaseURL для использования моего собственного шрифта в WebView. Он работает, но я столкнулся с проблемой производительности. Каждый раз, когда я изменяю содержимое WebView с помощью "loadDataWithBaseURL", он перезагружает шрифт, и это занимает несколько секунд.

Отключение @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.

Теги:
performance
webview
true-type-fonts

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 объект до создания снова, но это единственный способ заставить его работать с приличной скоростью и использованием памяти.

Я надеюсь, что кто-то сможет объяснить это поведение или дать лучшее решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню