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

.NET MAUI WebView安卓端崩溃致应用终止,求预防方案

.NET MAUI安卓WebView渲染进程崩溃(OOM)的预防方案

针对安卓端WebView运行一段时间后因渲染进程OOM崩溃导致应用被杀的问题,可从以下几个方向优化预防:

  • 及时释放WebView资源,避免内存泄漏
    在页面消失时(OnDisappearing生命周期),彻底清理WebView的资源,防止内存堆积:

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        if (MyWebView != null)
        {
            MyWebView.StopLoading();
            MyWebView.Source = null;
            // 从父布局移除WebView
            (Parent as Layout)?.Children.Remove(MyWebView);
            // 调用MAUI提供的清理方法
            MyWebView.Cleanup();
            MyWebView = null;
        }
    }
    
  • 限制WebView缓存,降低内存占用
    在安卓平台手动设置WebView的缓存模式,避免缓存过多资源占用内存:

    #if ANDROID
    var androidWebView = MyWebView.Handler.PlatformView as Android.Webkit.WebView;
    androidWebView.Settings.CacheMode = Android.Webkit.CacheModes.NoCache;
    #endif
    
  • 监听渲染进程崩溃,尝试恢复WebView
    通过安卓原生WebViewClient的OnRenderProcessGone方法捕获渲染进程崩溃事件,尝试重新加载页面,避免应用直接被杀:

    #if ANDROID
    var androidWebView = MyWebView.Handler.PlatformView as Android.Webkit.WebView;
    androidWebView.SetWebViewClient(new CustomWebViewClient(MyWebView));
    #endif
    
    // 自定义WebViewClient实现崩溃监听
    public class CustomWebViewClient : Android.Webkit.WebViewClient
    {
        private readonly WebView _mauiWebView;
    
        public CustomWebViewClient(WebView mauiWebView)
        {
            _mauiWebView = mauiWebView;
        }
    
        public override void OnRenderProcessGone(Android.Webkit.WebView view, Android.Webkit.RenderProcessGoneDetail detail)
        {
            base.OnRenderProcessGone(view, detail);
            // 仅处理崩溃场景,排除主动终止的情况
            if (detail.DidCrash())
            {
                // 重新加载当前页面
                _mauiWebView.Source = _mauiWebView.Source;
            }
        }
    }
    
  • 启用WebView多进程模式
    在安卓项目的AndroidManifest.xml中添加配置,开启WebView多进程模式,让渲染进程与主进程隔离,即使渲染进程崩溃也不会直接导致主进程被杀:

    <application android:hardwareAccelerated="true">
        <meta-data android:name="android.webkit.WebView.MultiProcess" android:value="true" />
    </application>
    

    同时确保应用启用硬件加速(android:hardwareAccelerated="true"),这能优化WebView的性能和内存使用效率。

  • 优化加载的网页内容
    协调网页开发方优化内容:压缩图片、懒加载非可视区域资源、精简JS和CSS代码,减少网页本身的内存消耗,从根源降低WebView的内存压力。

这些措施从内存管理、进程隔离、崩溃恢复三个维度入手,能有效降低安卓端WebView因OOM或渲染进程崩溃导致的应用被杀概率。

内容的提问来源于stack exchange,提问作者Murat Gungor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:45:07