为什么EMConversation的对象conversation已经定义为全局变量了,在接受消息的BroadcastReceiver里面还要重新定义

    private class NewMessageBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // 消息id(每条消息都会生成唯一的一个id,目前是SDK生成)
            String msgId = intent.getStringExtra("msgid");
            //发送方
            String username = intent.getStringExtra("from");
            // 收到这个广播的时候,message已经在db和内存里了,可以通过id获取mesage对象
            EMMessage message = EMChatManager.getInstance().getMessage(msgId);
            EMConversation    conversation = EMChatManager.getInstance().getConversation(username);
            if (!username.equals(username)) {
                // 消息不是发给当前会话,return
                return;
            }
            conversation.addMessage(message);            
            adapter.notifyDataSetChanged();
            
            // 注销广播
            abortBroadcast();
        }
    }
不然接收不到消息
共1个回复

环信技术支持中心

2015-09-25 12:36

同一用户的会话对象只有一个,接到消息时,没有会话对象会新创建,会话对象已存在的话会复用,这个逻辑是这样的。至于是否是全局的,这只是个变量上的使用问题,是用局部还是全局你可以自行定义。
点击此处继续提问与开发者们互动

申请试用

提交后工作人员会尽快与您联系进行功能演示
技术咨询已转移到管理后台,请先登录

即时通讯云使用者请在应用详情页面咨询
客服云使用者请进入管理员模式咨询

×

400电话

商务咨询

技术咨询

免费试用