Кто-нибудь успешно ограничил размер своего кэша WebView? - PullRequest
10 голосов
/ 17 февраля 2011

Я создаю приложение для чтения новостей, которое время от времени загружает веб-страницы в WebView.

. Я заметил, что при поведении по умолчанию кэш-память может стать очень неразумной очень быстро.Независимо от того, очистит ли Android этот кэш, когда памяти станет мало, я не согласен с тем, что мои пользователи видят новостное приложение объемом 15 МБ, когда все, кроме веб-кэша, составляет около 1 МБ.

Однако я хотел бы использоватькеш в некоторой степени.Я видел WebSettings # setAppCacheMaxSize (), и мне показалось, что это всего лишь билет.

Не похоже, что это что-то делает.Я жестко закодировал следующее в метод, который вызывается функцией onCreate () моей активности перед загрузкой чего-либо:

originalSourceWebView.getSettings().setAppCacheMaxSize(300*1024); (я использовал большее настраиваемое значение, но опустил его ниже, чтобы подтвердить свою проблему).

Я дую прямо на 300KB без каких-либо фанфар, как показано settings->applications->manage applications->click on my app.Я слушаю в WebChromeClient # onReachedAppMaxCacheSize для событий, но, похоже, это никогда не срабатывает.

Кто-нибудь успешно использовал это?Есть ли какой-то другой кеш, которым я должен пытаться управлять?Документы кажутся довольно скудными.Я вошел в исходный код Android, но он просто отправляет значения в нативный код, и я не знаю, как в него вникнуть.

Моя тестовая среда является связующей на 2.2.2.Я знаю, что для поддержки 1.5 и 1.6 мне нужно будет делать вызовы кеша по отражению, но если я не смогу выполнить эту работу, в этом не будет необходимости.

1 Ответ

6 голосов
/ 19 февраля 2011

Я не думаю, что есть API, чтобы делать то, что вы хотите.

setAppCacheMaxSize ограничивает размер кеша для API кеша приложений HTML5 - автономного хранилища, которое приложения HTML 5 могут использовать при запускеваш WebView - но похоже, что вы хотите ограничить кэш, используемый для загрузки страниц.изображения и т. д.

В качестве обходного пути вы можете периодически вызывать WebView.clearCache, хотя это действительно ограничивает эффективность кэша.Если вы хотите сохранить некоторые недавние страницы, вы можете получить их из CacheManager, прежде чем очистить кеш, а затем восстановить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...