You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms Android HybridWebView加载空白,报ERR_CACHE_WRITE_FAILURE错误

解决Xamarin Forms Android HybridWebView间歇性空白(ERR_CACHE_WRITE_FAILURE)问题

我之前帮开发者排查过类似的ERR_CACHE_WRITE_FAILURE问题,这个错误本质上是WebView尝试写入缓存文件时失败了,通常和Android的存储权限、缓存目录配置或者WebView的缓存策略有关。针对你遇到的这个间歇性空白问题,我整理了几个可行的解决方案:

1. 检查并确保存储权限配置正确

  • 针对Android 10及以下版本,在AndroidManifest.xml中添加存储权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    Android 11+建议使用Scoped Storage,避免申请MANAGE_EXTERNAL_STORAGE这种高权限,WebView默认会优先使用应用内部存储(无需额外权限),但如果你的WebView需要访问外部缓存,还是要确保权限已动态申请。
  • 在Xamarin Forms中,通过动态权限请求框架(比如Xamarin.Essentials的Permissions API)在运行时请求存储权限,尤其是Android 6.0及以上系统必须做这一步。

2. 自定义WebView的缓存目录与策略

默认缓存目录可能存在写入异常,你可以在Android项目的HybridWebViewRenderer中指定应用内部的缓存目录,确保写入权限:

protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{
    base.OnElementChanged(e);
    if (Control != null)
    {
        var webSettings = Control.Settings;
        // 使用应用内部缓存目录,无需外部权限
        var internalCacheDir = Context.CacheDir.AbsolutePath;
        webSettings.SetAppCachePath(internalCacheDir);
        webSettings.AppCacheEnabled = true;
        // 根据需求调整缓存模式,比如优先加载缓存再更新
        webSettings.CacheMode = Android.Webkit.CacheMode.LoadDefault;
    }
}
  • 如果想临时验证是否是磁盘缓存的问题,可以尝试禁用磁盘缓存,改用内存缓存(注意可能影响加载性能):
    webSettings.CacheMode = Android.Webkit.CacheMode.LoadNoCache;
    

3. 自动清理WebView缓存与数据

缓存文件损坏或磁盘空间不足也会导致写入失败,你可以在应用启动、WebView初始化前,或者捕获到错误时自动清理缓存:

// 清理Cookie
CookieManager.Instance.RemoveAllCookies(null);
CookieManager.Instance.Flush();
// 清理Web存储数据
WebStorage.Instance.DeleteAllData();
// 清理WebView缓存
Control.ClearCache(true);

可以把这段逻辑加到OnReceivedError方法中,捕获到ERR_CACHE_WRITE_FAILURE时先清理缓存再重新加载,替代手动刷新的临时方案。

4. 优化bundle.js的加载与配置

错误出现在bundle.js文件,可能是文件过大导致写入超时或失败:

  • 压缩bundle.js文件,使用代码分割、懒加载等方式减小单个文件体积;
  • 确保服务器返回bundle.js时,响应头的Content-Type设置为application/javascript,避免WebView解析时出现异常;
  • 尝试将bundle.js托管在CDN上,加快加载速度同时减少本地缓存写入的压力。

5. 更新相关组件版本

旧版本的Xamarin Forms或Android WebView可能存在已知的缓存写入bug:

  • 将Xamarin Forms更新到最新稳定版本;
  • 确保Android项目的目标SDK版本、编译SDK版本为当前最新的稳定版;
  • 检查并更新WebView相关的NuGet包。

这些方法可以逐步排查,优先从权限和缓存目录配置入手,这是此类问题最常见的原因。如果问题仍然间歇性出现,建议在应用中添加日志,记录缓存目录的可用空间、写入操作的异常信息,进一步定位具体原因。

内容的提问来源于stack exchange,提问作者Hector Meneses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:20:06