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
相关产品推荐
相关产品推荐

