添加事件监听

  • Android

更新时间不可用

了解实时消息 RTM 中添加事件监听相关内容的适用场景、配置步骤、实现要点和注意事项。

如需收到消息和事件通知,你需要先实现事件监听程序,然后订阅或者加入你想要接收消息或事件通知的频道。

添加事件监听

RTM 采用统一入口的方式处理消息和事件通知,每一种消息和事件通知都有对应的事件处理程序入口,你可以在其中实现自己的业务处理逻辑:

Java
RtmEventListener eventListener = new RtmEventListener() {
      @Override
      public void onMessageEvent(MessageEvent event) {
      }

      @Override
      public void onPresenceEvent(PresenceEvent event) {
      }

      @Override
      public void onTopicEvent(TopicEvent event) {
      }

      @Override
      public void onLockEvent(LockEvent event) {
      }

      @Override
      public void onStorageEvent(StorageEvent event) {
      }

      @Override
      public void onLinkStateEvent(LinkStateEvent event) {
          // Your link state change event handler
      }

      @Override
      public void onTokenPrivilegeWillExpire(String channelName) {
      }
    };
RtmConfig rtmConfig = new RtmConfig();
rtmConfig.eventListener = eventListener;
mRtmClient = RtmClient.create(rtmConfig);

删除事件监听

为避免内存泄漏、错误和异常(即空指针异常)引起的性能下降,声网建议你在不需要使用某个事件处理程序时对其进行注销。Java SDK 会在释放 RtmClient 时自动销毁事件处理程序。

事件通知类型

RTM 一共有 7 种类型事件,对应的有 7 种事件监听程序。你可以查看 API 参考的事件监听章节,了解每个事件监听程序传入参数的详细信息。

事件监听程序描述
onMessageEvent接收所有订阅的 Message Channel 中的消息通知或你加入的所有 Stream Channel 中订阅的 Topic 消息通知。事件负载数据中包含频道名称、频道类型、Topic 名称、事件发送者、消息负载数据类型等信息。
onPresenceEvent接收所有订阅的 Message Channel 或者你加入的所有 Stream Channel 中远端用户的在线状态事件通知。事件负载数据中包含频道名称、频道类型、事件类型、事件发送者、用户临时状态数据等信息。
onTopicEvent接收加入的所有 Stream Channel 中 Topic 变更事件通知。事件负载数据中包含频道名称、事件类型、Topic 名称、事件发送者(即 Topic 详情)等信息。
onStorageEvent接收订阅的 Message Channel 及加入的 Stream Channel 中所有的 Channel Metadata 事件通知,以及所有订阅用户的 User Metadata 事件通知。事件负载数据中包含频道名称、频道类型、事件类型(即具体 Metadata 数据)等信息。
onLockEvent接收订阅的 Message Channel 及加入的 Stream Channel 中所有的 Lock 事件通知。事件负载数据中包含有频道名称、频道类型、事件类型、锁详情等信息。
onLinkStateEvent接收客户端网络连接状态变更的事件通知,包含变更前后的连接状态、服务类型、导致变更的操作类型、变更原因、频道列表等信息。
onTokenPrivilegeWillExpire接收客户端 Token 将要过期的事件通知。
表格内容超出当前宽度,可横向滚动查看更多列。

完成事件监听处理程序后,你可以通过订阅频道或 Topic 来接收指定的 Message Channel 或 Stream Channel 中的消息和事件通知了。详见订阅 Message Channel 和订阅 Topic。