2011-09-24 25 views
16

Có thể ngăn WebView lưu dữ liệu trong bộ nhớ cache trong/data/data/???/cache/webViewCache không? Tôi đã thiết lập những điều sau đây trên WebSettings nhưng thư mục bộ nhớ cache vẫn được sử dụng:Ngăn chặn dữ liệu bộ nhớ cache trên Android WebView

webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
webSettings.setAppCacheEnabled(false); 

tôi đã nhận thấy rằng các tập tin bộ nhớ cache được xóa trên thoát ứng dụng hoặc khi ứng dụng đi vào nền nhưng tôi muốn cho họ không được tạo ra ở tất cả. Hơn nữa, tôi muốn ngăn chặn việc sử dụng webview.db & webviewCache.db được tìm thấy trong/data/data/???/database. Tôi hiện đang xóa cơ sở dữ liệu như vậy:

context.deleteDatabase("webview.db"); 
context.deleteDatabase("webviewCache.db"); 

Điều này dường như có hiệu quả mong muốn và các tệp không xuất hiện để được tạo lại để sử dụng. Có an toàn để giả định đây là trường hợp?

+0

Bạn đã có may mắn nào trong việc ngăn chặn bộ nhớ đệm? – omega

+0

Tôi không sợ. – dbotha

Trả lời

40

Các thuyết minh từ trang này dẫn tôi để tin rằng họ không muốn bạn có thể tiếp cận tốt để bộ nhớ cache:

http://developer.android.com/reference/android/webkit/CacheManager.html

Theo như tôi có thể nói, có (ít nhất) hai cách giữ bộ nhớ cache. Tôi chưa viết bất kỳ điều nào trong số này trong một ứng dụng, vì vậy không đảm bảo:

(1) Mỗi ​​lần WebView của bạn hoàn thành một trang, hãy xóa bộ nhớ cache. Một cái gì đó như thế này trong WebViewClient của bạn:

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    view.clearCache(true); 
} 

(2) Nếu bạn không quan tâm quá nhiều những gì được lưu trữ, nhưng chỉ muốn các nội dung mới nhất, bạn có thể có thể đạt được điều này bằng cách thiết lập các tiêu đề http chuột phải vào loadUrl (rõ ràng là bạn muốn kiểm tra điều này với máy chủ của mình). Ngoài ra, tính năng này chỉ khả dụng cho Android API 8+

Map<String, String> noCacheHeaders = new HashMap<String, String>(2); 
    noCacheHeaders.put("Pragma", "no-cache"); 
    noCacheHeaders.put("Cache-Control", "no-cache"); 
    view.loadUrl(url, noCacheHeaders); 

Có thể bạn đã thử điều này, nhưng cũng có thể đặt kích thước Bộ nhớ cache WebView thành một thứ nhỏ. Tôi không chắc liệu 0 có hoạt động hay không, vì vậy có thể 1:

wv.getSettings().setAppCacheMaxSize(1); 

Chúc may mắn!

+0

Tôi đã quản lý để xóa nó bằng cách đơn giản gọi là 'webView.clearCache (true)' và sau đó tải lại 'webView.loadData()'. Nó dường như không hoạt động mà không tải lại một cái gì đó mới. – Nevermore

+0

wv.getSettings(). SetAppCacheMaxSize (1); không được chấp nhận! – GeneralKimi

12

Trong ứng dụng của tôi (trên Android 4.2.2), tôi tải trên trang web một trang web có hình ảnh mà tôi có thể thay đổi khi chạy (tôi thay thế hình ảnh trong khi vẫn giữ đường dẫn). Giải pháp của Matt (1)

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    view.clearCache(true); 
} 

làm việc cho tôi, giải pháp (2) không! Chúc mừng

+0

Cảm ơn bạn đã chia sẻ giải pháp nào hoạt động tốt nhất! – Matt

Các vấn đề liên quan