默认
发表评论 3
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] Android退出IM后报ClosedChannelException
阅读(35107) | 评论(3 收藏 淘帖
我看了几个不退出app时退出im后登录登不上的求助帖,基本都是没有把init置为false而报203
这是我的退出

open class LogoutAsync() : AsyncTask<Any?, Int?, Int?>() {
    private var application: Application? = null
    constructor(application: Application) : this() {
        this.application = application
}
    override fun doInBackground(vararg params: Any?): Int {
        var code = -1
        try {
            code = LocalDataSender.getInstance().sendLoginout()
            } catch (e: Exception) {
        }

        // 重置初始化标志符,否则会报203
        IMClientManager.getInstance(application).resetInit()
        return code
    }
}




resetInit方法里就是将init置为false



fun resetInit() {
    init = false
}




这是我的退出调用



object : LogoutAsync(this) {}.execute()



这是我的登录方法



private fun doLoginIM() {
    chatClientManager.initMobileIMSDK()
    // 发送登录包
object : LocalDataSender.SendLoginDataAsync(cachedMyInfo?.userId.toString(), cachedToken?.access_token?.substring(7)) {}.execute()
}




我是每次将app置于后台就退出im,便于推送到达,然后进入前台再次连接,保证在线送达
第一次进入app一定是好的,并且连接速度很快,我知道肯定是我哪里出错了,但是找了一圈感觉把能重置的能初始化的都做了,但是就是出问题,求站长帮忙!
以下是我在app进入后台转前台看到的错误log


2021-03-07 20:40:57.322 5104-5104/com.example.schoolairdrop I/ClientCoreSDK: 【IMCORE-TCP】【本地网络通知】检测本地网络已连接上了!
2021-03-07 20:40:57.323 5104-8281/com.example.schoolairdrop W/LocalSocketProvider: 【IMCORE-tryConnectToHost-异步回调】连接失败,原因是:
    java.nio.channels.ClosedChannelException
        at io.netty.channel.nio.AbstractNioChannel.doClose(AbstractNioChannel.java:502)
        at io.netty.channel.socket.nio.NioSocketChannel.doClose(NioSocketChannel.java:342)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:759)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:736)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:607)
        at io.netty.channel.nio.NioEventLoop.closeAll(NioEventLoop.java:762)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:524)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:923)
2021-03-07 20:40:57.323 5104-8281/com.example.schoolairdrop W/LocalDataSender: 【IMCORE-TCP】[来自Netty的连接结果回调观察者通知]socket连接失败,本次登陆信息未成功发出!
2021-03-07 20:40:57.323 5104-8281/com.example.schoolairdrop I/LocalSocketProvider: 【IMCORE-TCP】channel优雅退出开始。。。
2021-03-07 20:40:57.323 5104-8281/com.example.schoolairdrop I/LocalSocketProvider: 【IMCORE-TCP】channel优雅退出结束。


以及这个


2021-03-07 20:43:06.104 5104-8057/com.example.schoolairdrop D/LocalDataSender: 【IMCORE-TCP】发送登陆指令时,socket连接未就绪,首先开始尝试发起连接(登陆指令将在连接成功后的回调中自动发出)。。。。
2021-03-07 20:43:06.106 5104-8057/com.example.schoolairdrop D/LocalSocketProvider: 【IMCORE-TCP】tryConnectToHost并获取connection开始了...
2021-03-07 20:43:06.107 5104-5104/com.example.schoolairdrop I/ClientCoreSDK: 【IMCORE-TCP】【本地网络通知】检测本地网络已连接上了!
2021-03-07 20:43:06.107 5104-8057/com.example.schoolairdrop D/LocalSocketProvider: 【IMCORE-TCP】tryConnectToHost并获取connectio已完成。 .... continue ...
2021-03-07 20:43:06.111 5104-8652/com.example.schoolairdrop I/LocalSocketProvider: 【IMCORE-TCP】channel优雅退出开始。。。
2021-03-07 20:43:06.111 5104-8652/com.example.schoolairdrop I/LocalSocketProvider: 【IMCORE-TCP】channel优雅退出结束。
2021-03-07 20:43:06.112 5104-8652/com.example.schoolairdrop W/LocalSocketProvider: 【IMCORE-tryConnectToHost-异步回调】连接失败,原因是:
    java.lang.IllegalStateException: executor not accepting a task
        at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61)
        at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:194)
        at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46)
        at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:180)
        at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:166)
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551)
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490)
        at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615)
        at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604)
        at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
        at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:984)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:504)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:417)
        at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:474)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:923)
2021-03-07 20:43:06.112 5104-8652/com.example.schoolairdrop W/LocalDataSender: 【IMCORE-TCP】[来自Netty的连接结果回调观察者通知]socket连接失败,本次登陆信息未成功发出!


并且我发现如果app在后台一直重试登录,下次进入app前台基本是可以连的上的
log类似于这种


2021-03-07 20:40:15.414 5104-5402/com.example.schoolairdrop D/AutoReLoginDaemon: 【IMCORE-TCP】自动重新登陆线程执行中, autoReLogin?true...
2021-03-07 20:40:18.414 5104-5415/com.example.schoolairdrop D/AutoReLoginDaemon: 【IMCORE-TCP】自动重新登陆线程执行中, autoReLogin?true...
2021-03-07 20:40:21.415 5104-5428/com.example.schoolairdrop D/AutoReLoginDaemon: 【IMCORE-TCP】自动重新登陆线程执行中, autoReLogin?true...



但是当上面两个log一出基本不重开app是没有办法连上了,在后台也不会有自动重连的log

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

标签:MobileIMSDK
上一篇:[已解决] 求助Andriod手机端MobileIMSDK自动重连导致的OOM下一篇:[已回复] MobileIMSDK的onTransferMessage_RealTimeSendFaild回调总返回false?
推荐方案
评论 3
我记得这个需求,你跟我在qq上讨论了很久。我建议andriod上因为系统网络广播事件的发出有延迟,不要搞这种退到后台就应用层关闭网络,回到前台马上手动打开。应该交给sdk层默认自动去处理即可,应用层不需要干涉。
引用:JackJiang 发表于 2021-03-08 15:41
我记得这个需求,你跟我在qq上讨论了很久。我建议andriod上因为系统网络广播事件的发出有延迟,不要搞这种 ...

emm…站长您可能认错了,我根本没有加过您的qq
那我明白了,原来sdk层是有处理的,那我就啥也不用干了是不是,就只要打开app的时候登录一次即可这样对嘛。
引用:TinyCaviar 发表于 2021-03-08 23:45
emm…站长您可能认错了,我根本没有加过您的qq
那我明白了,原来sdk层是有处理的,那我就啥也不用干 ...

是的
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部