Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于模拟器下的监听问题 #513

Closed
abellee opened this issue Jun 7, 2022 · 1 comment
Closed

关于模拟器下的监听问题 #513

abellee opened this issue Jun 7, 2022 · 1 comment

Comments

@abellee
Copy link

abellee commented Jun 7, 2022

我现在的处理是:
1、reassemable下移除监听
2、mainbuild下添加监听,条件是
* 非生产环境
* 已初始化并且未添加过监听
3、在app完成初始化后,即用户相关信息从缓存中恢复后,进行初始化、监听、并登录
4、接收到断开后,重新登录

模拟器A运行后,日志输出 只看到触发了一次监听事件,我理解的这是正确的结果。

然后这时候我在另外一个模拟器B下发起添加好友,但是模拟器A相应的监听未触发,这个时候我保存一下,即触发热重载,这个时候等于是移除监听并添加监听,添加好友的监听被触发。

之后我做了另一个处理,我在登录的时候,会先调用一次登出,登出里会检测isLoginBefore,如果true的话,会先进行登出,登出成功后,取消所有监听。登录成功后,再次添加监听。
这样处理过后,重新运行至模拟器A,在模拟器B里添加好友,模拟器A相应的监听触发成功。

经过我反复的测试,结合热重载的环境考虑,我之前的理解是,由于热重载后,导致监听混乱,而无法接收到事件,所以我做了第1、2两点的处理后,得到了解决,后面我把登陆做了细化,是在我们用户登录后再去登陆环信,这个时候我发现,貌似连接成功的事件,是在登陆之后被触发的,也就是说,初始化并添加事件监听之后,其实还并没有连接环信服务器。但是监听又不正常了。
我也尝试了一下直接run到模拟器里,也就是不用热重载,上面的监听也还是有问题的。

我没做过flutter的原生插件,所以我不太理解这里的问题,想请教一下:
1、从现象来看,貌似登出会影响到监听?
2、热重载的时候,原生那边的socket会断开?
3、在单例的情况下,这个监听到底需要如何处理,才能保持稳定?

感谢!

@dujiepeng
Copy link
Collaborator

dujiepeng commented Jun 9, 2022

@abellee 我理解不存在你说的问题或者是我没太理解。
因为热重载的时只是重新执行build相关的代码,如果初始化和添加监听放到initState应该不会重复执行的。 所以添加监听放到initState里,移除监听放到dispose里就可以。

1、 登出会释放所有已有监听;
2、热重载不会断开socket;
3、单例的话不需要单独处理,但是登出的话需要重新添加监听;

如果方便可以给我提供一个简单的demo,发到邮箱 dujiepeng@easemob.com 或者是加我的QQ 347302029来进一步沟通。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants