项目中集成了云信推送SDK,某晚,客户端接收到了两条一样的信息,后台兄弟们只推送了一次,What?Why?
根本原因:多次注册了观察者
解决的问题:云信推送了一条消息,客户端接收到两次。
云信接收推送的消息使用的是观察者模式。
Activity生命周期函数onCreate()中
注册观察者:
// 注册消息接收观察者
NIMClient.getService(MsgServiceObserve.class)
.observeReceiveMessage(incomingMessageObserver, true);
生命周期函数onDestry()中
注销观察者:
// 注销消息接收观察者
NIMClient.getService(MsgServiceObserve.class)
.observeReceiveMessage(incomingMessageObserver, false);
观察者
/**
* 消息接收观察者
*/
private Observer<List<IMMessage>> incomingMessageObserver =
(Observer<List<IMMessage>>) messages -> {
for (IMMessage msg : messages) {
}
};
观察者接收到的消息重复,即一条消息(ext_id相同)接收到了两次,自己排查代码及与云信技术支持沟通,得出结论:多次注册了观察者。
最终在配置清单中查看到:
组成员把launcher:"singleTask"删除了,O M G!!!
删除后导致Activity可以有多个实例,当然也可以多次注册观察者。
网友评论