默认
发表评论 29
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] 求助Andriod手机端MobileIMSDK自动重连导致的OOM
IM_SDK默认配置 :        
        ConfigEntity.appKey = "***************"
        ConfigEntity.serverIP = "**************"
        ConfigEntity.serverPort = ****
        //  心跳包设置
        ConfigEntity.setSenseMode(ConfigEntity.SenseMode.MODE_10S)
        //  开启/关闭DEBUG信息输出
        ClientCoreSDK.DEBUG = false
        //  核心库的初始化
        ClientCoreSDK.getInstance().init(this)



问题重现 :
-> 启动APP时,网络处于连接状态,登录成功;
-> 然后,APP断网,持续大约30分钟左右;
-> APP_OOM崩溃;
-> [日志的意思是起的重连线程过多]

由此,修改重连机制:

打开自动重连 :

```
ClientCoreSDK.autoReLogin = true
AutoReLoginDaemon.`AUTO_RE$LOGIN_INTERVAL` = 2000

```

关闭自动重连 :
```
ClientCoreSDK.autoReLogin = false
AutoReLoginDaemon.`AUTO_RE$LOGIN_INTERVAL` = Int.MAX_VALUE

```
重连策略如下 :

-> 联网后,轮询两秒登录一次;
-> 登录成功后, 将轮询登录停止,将自动重连机制打开;
-> 断网后2分钟后,将自动重连机制关闭;

这样的确解决了以上OOM问题以及IM断网联网重连问题,但又产生了新的问题;
APP 联网情况下,连续运行三天三夜后,出现新的OOM问题,截图如下 :




这次,我找不到解决方案了,求助大佬;











即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MobileIMSDK
上一篇:[已解决] 使用Docker部署的MobileSDKIM框架一直无法登录下一篇:[已回复] Android退出IM后报ClosedChannelException

本帖已收录至以下技术专辑

推荐方案
评论 29
不让我发图我去....
引用:JackJiang 发表于 2021-03-02 11:35
你MobileIMSDK版本具体用的是哪个版本?
协议是TCP还是UDP?

MobileIMSDK4a_udp, 图片过大 我压缩下..
图片1

IM自动重连1.png (91.72 KB, 下载次数: 4159)

IM自动重连1.png
图片2

IM断网重连2.png (200.26 KB, 下载次数: 4049)

图片2

图片2
图片三

IM 断网重连3.png (203.36 KB, 下载次数: 4032)

图片3

图片3
图片1和图片2是 开启自动重连断网后,线程过多报错;
图片3是 采用自定义策略后.联网状态下线程过多报错;
引用:JackJiang 发表于 2021-03-02 11:45
你的设备是不是定制的?设备是常开、常联网状态吧

我的设备机型是 三星 SM G950F;

设备是常开长联网状态;
引用:JackJiang 发表于 2021-03-02 11:51
你用的MobileIMSDK的版本号记得是多少吗

版本应该是v5.0, 具体从代码中看不出版本吧?
引用:JackJiang 发表于 2021-03-02 12:13
你的应用在这种场景下,必须要用udp协议吗

倒不是必须...用啥协议都行.

我们的场景比较复杂.有些设备是常开长联网的 有些设备是每天开关. 还有些设备网络环境不稳;

对于用什么协议而言,倒是无所谓,也不太明白UDP和TCP协议有啥区别, 能实现功能就行;
引用:JackJiang 发表于 2021-03-02 12:13
你的应用在这种场景下,必须要用udp协议吗

大佬怎么看?
引用:JackJiang 发表于 2021-03-02 15:12
你这种场景,我建议换成tcp协议版本试试。
tcp版本对于异步和线程的管理要优化一些,我做过暴力测试,写 ...

好的大佬 我这边试试. 麻烦你了.
引用:JackJiang 发表于 2021-03-02 15:12
你这种场景,我建议换成tcp协议版本试试。
tcp版本对于异步和线程的管理要优化一些,我做过暴力测试,写 ...

另外 TCP版本和UDP版本有什么功能上的区别吗? 还是仅仅是协议不同. 我看文档并没有关于这块的解释;
引用:JackJiang 发表于 2021-03-02 15:12
你这种场景,我建议换成tcp协议版本试试。
tcp版本对于异步和线程的管理要优化一些,我做过暴力测试,写 ...

我想问下,TCP和UDP_SDK版本有什么功能上的区别./ 还是说仅仅协议不同,我看文档中没有对这一块说说明;
我想问下,TCP和UDP_SDK版本有什么功能上的区别./ 还是说仅仅协议不同,我看文档中没有对这一块说说明;
引用:JackJiang 发表于 2021-03-02 15:12
你这种场景,我建议换成tcp协议版本试试。
tcp版本对于异步和线程的管理要优化一些,我做过暴力测试,写 ...

您好,我试了下,TCP版本不会导致这个问题;
但是,我还是想知道TCP版本和UDP版本有什么功能上的区别吗? 还是仅仅是协议不同.
有没有对应区别的文档解释
引用:JackJiang 发表于 2021-03-03 11:20
只有协议不同,里面的实现代码肯定也是不同,但暴露给开发者的api完全相同,目的就是方便切换不同协议。

好的好的 十分感谢.  另外这两种协议在性能上有什么差别吗? 会不会UDP传输更快或者TCP更消耗性能之类的说法;
引用:JackJiang 发表于 2021-03-03 11:52
除非网络特别烂的场景,我建议优先选用tcp

为啥在网络特别烂的时候要用UDP..是因为本身协议问题还是SDK中重连机制的问题呢?
能麻烦能解释一下吗?
引用:JackJiang 发表于 2021-03-03 15:04
你在国内打开github是不是慢的跟屎一样,背后的原因就是tcp在跨国烂网下的表现啊

udp效率高一点,行就 ...

好的.大佬..多谢解答..我研究下....

我试了TCP的 的确是没有自动重连线程无限增长的问题了..

感谢.
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部