ภาพรวม
บทความนี้แนะนำการกำหนดพาธเก็บ Cache ของ WebView ไว้ใน Local Storage ของแอป ผ่าน setAppCachePath() เพื่อเพิ่มประสิทธิภาพการโหลดหน้าเว็บซ้ำ
โค้ดการตั้งค่า Cache
WebView webView = findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
// กำหนดพาธ Cache ไปที่ Internal Storage ของแอป
String cachePath = getApplicationContext().getFilesDir().getAbsolutePath() + "/cache";
webView.getSettings().setAppCachePath(cachePath);
// เปิดใช้งาน App Cache (จำเป็นสำหรับ Application Cache API)
webView.getSettings().setAppCacheEnabled(true);
// โหมด Cache
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // ปกติ: ใช้ cache ถ้ามี มิฉะนั้นโหลดจากเครือข่าย
// ตัวเลือกอื่น:
// LOAD_CACHE_ONLY - ใช้ cache เท่านั้น
// LOAD_NO_CACHE - ไม่ใช้ cache โหลดจากเครือข่ายทุกครั้ง
// LOAD_CACHE_ELSE_NETWORK - ใช้ cache แม้หมดอายุ ถ้าไม่มีค่อยโหลดจากเครือข่าย
webView.loadUrl("https://touch.facebook.com/");
โหมด Cache Mode ทั้ง 4 แบบ
| โหมด | คำอธิบาย | กรณีใช้งาน |
|---|---|---|
| LOAD_DEFAULT | ใช้ cache ตาม HTTP headers (ปกติ) | ทั่วไป |
| LOAD_CACHE_ONLY | ใช้ cache เท่านั้น ไม่โหลดจากเน็ต | ออฟไลน์ / ประหยัดดาต้า |
| LOAD_NO_CACHE | ไม่ใช้ cache โหลดใหม่ทุกครั้ง | พัฒนา / ต้องการข้อมูลล่าสุด |
| LOAD_CACHE_ELSE_NETWORK | ใช้ cache แม้หมดอายุ | เครือข่ายไม่เสถียร |
ประเภท Cache ใน WebView
- Browser Cache: HTTP Cache (Headers: Cache-Control, ETag) - จัดการอัตโนมัติ
- Application Cache (AppCache): HTML5 AppCache API (Deprecated) - ต้องใช้ setAppCachePath
- Service Worker Cache: ผ่าน Service Worker API (Modern replacement for AppCache)
ข้อควรระวัง
- AppCache API ถูก Deprecated แล้วในมาตรฐานเว็บ ควรย้ายไปใช้ Service Worker
- Internal Storage มีขนาดจำกัด ควรตรวจสอบพื้นที่ว่าง
- Clear cache:
webView.clearCache(true)(true = include disk files)
Manifest
เพียง INTERNET permission