Xamarin Android使用pop async时页面实例无法正常关闭问题求助
Xamarin Android RFID扫描多回调重复弹窗问题解决方案
- 优先在页面生命周期中解绑扫描回调:所有注册了RFID扫描事件、MessagingCenter订阅的页面,必须在
OnDisappearing方法中完成解绑操作,避免页面实例被事件源持有无法被GC回收。
// 解绑示例 protected override void OnDisappearing() { base.OnDisappearing(); // 解绑RFID扫描事件 RfidService.Instance.OnTagRead -= HandleTagRead; // 如果用MessagingCenter订阅必须加这行 MessagingCenter.Unsubscribe<object, string>(this, "RfidScanResult"); }
- 回调执行前增加页面有效性校验:在扫描结果回调逻辑的第一行增加判断,只有当前页面处于可见状态、且为导航栈栈顶页面时,才处理扫描结果、弹出提示。
private async void HandleTagRead(string rfidCode) { // 无效页面直接拦截 if (!IsVisible || Navigation.NavigationStack.LastOrDefault() != this) return; await UserDialogs.Instance.AlertAsync(rfidCode); }
- 清理页面引用:PopAsync移除页面后,主动将所有静态变量、单例类、全局缓存中持有的该页面实例引用置为null,移除GC回收的阻碍。
- 可选优化:调用
UserDialogs.Instance.AlertAsync时传入当前页面的上下文参数,限制弹窗只能在当前页面的上下文环境中触发,避免已销毁页面的回调弹出无效窗口。
内容的提问来源于stack exchange,提问作者sudhakar
相关产品推荐
相关产品推荐

