en la documentación de CachingMode de WebView , en la descripción de LOAD_DEFAULT dice:
Si el tipo de navegación no impone ningún comportamiento específico, utilice los recursos almacenados en caché cuando estén disponibles y no hayan caducado ; de lo contrario, cargue recursos de la red.
¿Cómo puedo configurar el tiempo de caducidad para el almacenamiento en caché de la vista web en el cliente de Android sin necesidad de modificar la configuración del lado del servidor?
También he revisado los siguientes enlaces útiles: link1 , link2 y link3 .
haga eso usando WorkManager, cree un administrador de trabajo periódico para llamar a su función 'clearWebViewCache' (como todos los días)
¿Qué pasa con el uso de un cliente de vista web personalizado basado en OkHttp?
Pruebe esto: agregue el cliente okhttp como dependencia:
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
A continuación, cree un interceptor OkHttp. En este interceptor puede definir la edad de su caché:
import okhttp3.CacheControl import okhttp3.Interceptor import okhttp3.Response import java.util.concurrent.TimeUnit class CacheInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val response = chain.proceed(chain.request()) val cacheControl = CacheControl.Builder() .maxAge(1, TimeUnit.MINUTES) // 1 minute cache .build() return response.newBuilder() .removeHeader("Pragma") .removeHeader("Cache-Control") .header("Cache-Control", cacheControl.toString()) .build() } }Impleméntalo:
... lateinit var wb: WebView lateinit var okHttpClient: OkHttpClient lateinit var cache: Cache override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val httpCacheDirectory = File(applicationContext.cacheDir, "http-cache") val cacheSize = 10 * 1024 * 1024 // 10 MiB val cache = Cache(httpCacheDirectory, cacheSize.toLong()) okHttpClient = OkHttpClient.Builder() .addNetworkInterceptor(CacheInterceptor()) .cache(cache) .build() wb = findViewById(R.id.webView) wb.webViewClient = object : WebViewClient() { // API 21- @SuppressWarnings("deprecation") override fun shouldInterceptRequest( view: WebView?, url: String ): WebResourceResponse? { return this.getNewResponse(url) } // API 21+ @TargetApi(Build.VERSION_CODES.LOLLIPOP) override fun shouldInterceptRequest( view: WebView?, request: WebResourceRequest ): WebResourceResponse? { return getNewResponse(request.url.toString()) } private fun getNewResponse(url: String): WebResourceResponse? { return try { val okHttpRequest: Request = Request.Builder().url(url).build() val response: Response = okHttpClient.newCall(okHttpRequest).execute() WebResourceResponse("", "", response.body!!.byteStream()) } catch (e: IOException) { e.printStackTrace() null } } } } ...