WebViewのキャッシュについて

7,317 views
Skip to first unread message

yos-mas

unread,
May 10, 2012, 11:13:39 AM5/10/12
to android-g...@googlegroups.com
お世話になっております。
yos-masと申します。

WebViewを使ったアプリで
webview.getSettings().setAppCacheMaxSize(3 * 1024 * 1024);
でキャッシュの上限を3MBにしたいのですが、
アプリの管理画面でキャッシュを確認すると
3MBを超えても保存されています。

また、
webview.setAppCacheEnabled(false);
で無効にしてもキャッシュが保存されます。

キャッシュを制御することはできないのでしょうか。
どなたかご教授お願いいたします。

dmp

unread,
May 11, 2012, 4:10:59 AM5/11/12
to android-g...@googlegroups.com
dmpと申します。

ここでいうキャッシュとは、html, css, png等のキャッシュですか、それともHTML5のアプリケーションキャッシュでしょうか。 

setAppCacheEnabled(boolean flag)
Tell the WebView to enable Application Caches API.
http://developer.android.com/reference/android/webkit/WebSettings.html 

お使いのAPI(setAppCacheMaxSize, setAppCacheEnabled)はHTML5のアプリケーションキャッシュAPIを制御するためのものなので、いわゆる普通のキャッシュは制御しません。
キャッシュを制御したい場合は WebSettings#setCacheMode が利用できます。

yos-mas

unread,
May 12, 2012, 7:19:29 AM5/12/12
to android-g...@googlegroups.com
dmp様

返信ありがとうございます。

不勉強で申し訳ないですが、
設定→アプリゲーション→アプリケーションの管理
からアプリの情報を表示したときに、
「キャッシュ」と書かれているもの、
ということしかわかりません。
普通のキャッシュということになるのでしょうか。

お教えいただいたWebSettings#setCacheModeは
キャッシュの上限値を設定することはできるのでしょうか。

宜しくお願い致します。

2012年5月11日金曜日 17時10分59秒 UTC+9 dmp:

dmp

unread,
May 13, 2012, 1:27:56 AM5/13/12
to android-g...@googlegroups.com
dmpです。

設定→アプリゲーション→アプリケーションの管理
からアプリの情報を表示したときに、
「キャッシュ」と書かれているもの、
そうですね、そこに表示されるものは一般的なキャッシュです。 

リファレンスの通り、 setCacheMode() では上限値を設定することは出来ません。
ご希望の挙動ではありませんが、適宜キャッシュ容量を監視し、上限を超えたら WebView#clearCache(true)[1] ですべて消去するという方式しかないと思います。

yos-mas

unread,
May 14, 2012, 7:46:45 PM5/14/12
to android-g...@googlegroups.com
返信遅くなってしまい申し訳ございません。

dmp様の仰るとおり、定期的に一括消去しかできなさそうですね。
ご教授いただきありがとうございました。

今更ながらエミュレータで試してみたのですが、
WebViewを動かすといわゆるキャッシュファイル以外に
webview.dbとかwebviewCache.dbといったDBファイルも生成されるんですね。
変に容量を食わないか心配です。
想定していた内部データ以外にいろいろ生成されて、結構面倒ですね。

以上、宜しくお願い致します。

2012年5月13日日曜日 14時27分56秒 UTC+9 dmp:

柳澤大祐

unread,
May 14, 2012, 8:24:55 PM5/14/12
to android-g...@googlegroups.com
dmpです。

webview.db はCookieやパスワード等を保存するDB、webviewCache.db は
Context.getCacheDir() 以下に置かれるキャッシュファイル実体とURLとの対応その他を保存するDBです。
これらDBが消費するストレージ容量はそう多くないと思います。

# webview.db
sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE cookies (_id INTEGER PRIMARY KEY, name TEXT, value TEXT,
domain TEXT, path TEXT, expires INTEGER, secure INTEGER);
CREATE TABLE formdata (_id INTEGER PRIMARY KEY, urlid INTEGER, name
TEXT, value TEXT, UNIQUE (urlid, name, value) ON CONFLICT IGNORE);
CREATE TABLE formurl (_id INTEGER PRIMARY KEY, url TEXT);
CREATE TABLE httpauth (_id INTEGER PRIMARY KEY, host TEXT, realm TEXT,
username TEXT, password TEXT, UNIQUE (host, realm) ON CONFLICT
REPLACE);
CREATE TABLE password (_id INTEGER PRIMARY KEY, host TEXT, username
TEXT, password TEXT, UNIQUE (host, username) ON CONFLICT REPLACE);
CREATE INDEX cookiesIndex ON cookies (path);

# webviewCache.db
sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE cache (_id INTEGER PRIMARY KEY, url TEXT, filepath TEXT,
lastmodify TEXT, etag TEXT, expires INTEGER, expiresstring TEXT,
mimetype TEXT, encoding TEXT,httpstatus INTEGER, location TEXT,
contentlength INTEGER, contentdisposition
TEXT, crossdomain TEXT, UNIQUE (url) ON CONFLICT REPLACE);
CREATE INDEX cacheUrlIndex ON cache (url);


2012/5/15 yos-mas <ysdm...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/j0AT1UJHoM4J
> にアクセスしてください。
>
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。



--
柳澤大祐
dmp...@gmail.com
Reply all
Reply to author
Forward
0 new messages