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

Xamarin Forms WebView引发Android错误:Error inflating class <unknown>

Android端Xamarin.Forms WebView返回后导航报错的解决方案

针对你遇到的Android端WebView返回后App Shell导航出现Binary XML file line #1 in com.xxx.xxx:layout/rootlayout: Error inflating class <unknown>报错问题,以下是几个实用的解决办法:

  • 手动在页面消失时销毁WebView原生实例
    在包含WebView的内容页中重写OnDisappearing方法,主动清理WebView的资源和绑定:

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        if (Device.RuntimePlatform == Device.Android)
        {
            // 替换成你页面中WebView的实例名
            var webRenderer = MyWebView.GetRenderer() as Xamarin.Forms.Platform.Android.WebViewRenderer;
            webRenderer?.Control?.Destroy();
            MyWebView.RemoveBinding(WebView.SourceProperty);
            MyWebView.Source = null;
        }
    }
    
  • 通过导航事件触发资源清理
    在App.xaml.cs中监听Shell的导航事件,当页面被Pop时,调用WebView页面的清理方法:

    protected override void OnStart()
    {
        Shell.Current.Navigated += (sender, args) =>
        {
            if (args.Source == ShellNavigationSource.Pop && Device.RuntimePlatform == Device.Android)
            {
                if (args.PreviousPage is WebViewContentPage webPage)
                {
                    webPage.CleanupWebView();
                }
            }
        };
    }
    

    然后在WebView页面中定义CleanupWebView方法,把上面OnDisappearing里的清理逻辑移到这个方法中即可。

  • 自定义WebViewRenderer优化资源释放
    创建Android平台的自定义WebViewRenderer,重写Dispose方法确保原生控件被销毁:

    [assembly: ExportRenderer(typeof(WebView), typeof(CustomAndroidWebViewRenderer))]
    namespace YourAppNamespace.Droid.Renderers
    {
        public class CustomAndroidWebViewRenderer : WebViewRenderer
        {
            public CustomAndroidWebViewRenderer(Context context) : base(context) { }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    Control?.Destroy();
                }
                base.Dispose(disposing);
            }
        }
    }
    
  • 检查WebView Source的引用问题
    页面消失时务必将WebView的Source设置为null,避免Source对象持有页面引用导致内存泄漏,阻碍页面正常回收。

这些方法的核心都是确保WebView的Android原生资源被彻底释放,避免因内存泄漏引发后续导航时的布局加载异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:20:05