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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:18:05