用途:本技能用于在 CometChat Android UIKit v6 中通过 SharedFlow 事件总线订阅和发送事件,取代 v5 的 Java 监听器接口模式。适用于监听消息发送/接收/编辑/删除、通话接受/拒绝/结束、用户或群组成员变更、会话更新、UI 事件(自定义 UI 位置事件),以及发送自定义事件触发 UI 更新。不适用于 SDK 初始化登录(应用 cometchat-android-v6-core),也不适用于 SDK 级监听器(如 CometChat.addMessageListener),二者是独立系统。
主要能力:CometChatEvents 是 com.cometchat.uikit.core.events 下的单例对象,管理 6 个 SharedFlow:messageEvents、callEvents、userEvents、groupEvents、conversationEvents、uiEvents。各流 replay=0,缓冲溢出策略为 DROP_OLDEST,缓冲容量分别为消息 64、群组 32、用户/会话/UI 16、通话 8。事件类型包括 CometChatMessageEvent(MessageSent 含 message 与 status:IN_PROGRESS、SUCCESS、ERROR;MessageEdited;MessageDeleted)、CometChatCallEvent(CallAccepted、CallRejected)、CometChatUserEvent、CometChatGroupEvent、CometChatConversationEvent、CometChatUIEvent(含 CustomUIPosition)。
使用方式:在 ViewModel 或协程作用域中用 viewModelScope.launch 与 collect 订阅并匹配事件;在 Jetpack Compose 中用 LaunchedEffect 收集;在 Activity 或 Application 中创建 CoroutineScope 收集,并在 onDestroy 中调用 scope.cancel()。发送事件调用 emitMessageEvent、emitCallEvent、emitUserEvent、emitGroupEvent、emitConversationEvent、emitUIEvent,这些函数线程安全,内部在 Dispatchers.Default 上启动。
限制与硬性规则:不得在 Dispatchers.Default 上收集流以更新 UI,应切换至 Dispatchers.Main 或使用 viewModelScope / lifecycleScope;组件销毁时必须取消协程作用域以避免内存泄漏;事件在 Dispatchers.Default 上发出,订阅方负责线程切换;缓冲溢出会丢弃最旧事件,高频事件在订阅缓慢时可能丢失;不要将 UIKit 事件与 SDK 级监听器混淆;CometChatUIKit.sendTextMessage()、sendMediaMessage()、sendCustomMessage() 会自动发出消息事件,不要重复发送。迁移对照:v5 的 addListener(id, listener) 对应 v6 的 flow.collect,removeListener(id) 对应取消协程作用域。