Xamarin使用Plugin.CloudFirestone时如何停止Firebase实时更新监听
实现停止Firestore实时监听的方案
Plugin.CloudFirestore的AddSnapshotListener方法会返回一个IListenerRegistration类型的实例,该实例专门用于管控当前监听器的生命周期,属于Firestore各端SDK的通用设计,插件层直接对齐了原生能力没有单独在文档标注。具体实现步骤如下:
- 定义存储监听器注册对象的变量
如果只需要管理单个监听,直接定义类级别的字段即可:
// 页面/业务服务类的成员变量 private IListenerRegistration _documentSnapshotListener;
如果需要同时管理多个监听器,用列表统一存储:
private List<IListenerRegistration> _allActiveListeners = new List<IListenerRegistration>();
- 添加监听时接收返回值
修改原有监听添加代码,把返回值赋值给提前定义的变量:
_documentSnapshotListener = CrossCloudFirestore.Current.Instance .Collection("yourcollection") .Document("yourdocument") .AddSnapshotListener((snapshot, error) => { // 原有业务逻辑保持不变 }); // 多监听场景下加入列表统一管理 _allActiveListeners.Add(_documentSnapshotListener);
- 登出时移除监听
在用户登出逻辑的执行位置,调用注册对象的Remove方法销毁监听即可:
// 单个监听的移除逻辑 if (_documentSnapshotListener != null) { _documentSnapshotListener.Remove(); _documentSnapshotListener = null; } // 多监听批量移除逻辑 foreach (var listener in _allActiveListeners) { listener.Remove(); } _allActiveListeners.Clear();
注意事项
- 除了登出场景,建议在页面
OnDisappearing、业务服务销毁的生命周期节点也执行监听移除逻辑,避免内存泄漏和后台无效更新触发业务异常 - 重复添加相同逻辑的监听前,要先移除上一次的监听实例,避免出现重复回调的问题
内容的提问来源于stack exchange,提问作者José Donizete Oliveira Junior
相关产品推荐
相关产品推荐

