Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีบันทึก Cache ใน Local Storage ของ Android WebView

ภาพรวม

บทความนี้แนะนำการกำหนดพาธเก็บ 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