默认
发表评论 3
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] MobileIMSDK在小米6上一键清除内存后,再次登录成功又被踢下线
阅读(33367) | 评论(3 收藏 淘帖
我用的小米6手机,netty版server3.2
一,第一次登录成功后正常。
二,然后用小米手机自带的一键清理功能清理内存,这个时候,app已经给kill掉了。
三,再次打开app,这个时候因为登录过,走的是密码免输入流程,用上次记录的账密直接登录,但是登录成功后马上掉线。

client端log:
01-14 18:57:39.524 22017-22168/com.dl.cbm.acqchat D/LocalUDPSocketProvider: 【IMCORE】isLocalUDPSocketReady()==true,直接返回本地socket引用哦。
01-14 18:57:39.525 22017-22017/com.dl.cbm.acqchat D/LocalUDPDataReciever: 【IMCORE】【QoS机制】6b643316-892c-46d7-8a0d-81705972cfe1已经存在于发送列表中,这是重复包,通知应用层收到该包罗!
01-14 18:57:39.525 22017-22017/com.dl.cbm.acqchat W/QoS4ReciveDaemon: 【IMCORE】【QoS接收方】指纹为6b643316-892c-46d7-8a0d-81705972cfe1的消息已经存在于接收列表中,该消息重复了(原理可能是对方因未收到应答包而错误重传导致),更新收到时间戳哦.
01-14 18:58:37.060 3630-3948/? D/PowerCheckerService: foreground, uid = 10268, app = com.dl.cbm.acqchat



服务器端log:
[DEBUG] - [18:57:32.919]【IM_回调通知OnUserLoginAction_CallBack】用户:1 上线了! | (ServerEventListenerImpl^onUserLoginAction_CallBack:84)
[DEBUG] - [18:57:35.790]【IMCORE-netty-本机QoS】【QoS发送方】=========== 消息发送质量保证线程运行中, 当前需要处理的列表长度为1... | (QoS4SendDaemonRoot^doTaskOnece:149)
[DEBUG] - [18:57:35.790]【IMCORE-netty-本机QoS】【QoS发送方】指纹为6b643316-892c-46d7-8a0d-81705972cfe1的消息包已成功进行重传,此次之后重传次数已达1(最多1次). | (QoS4SendDaemonRoot$1^update:205)
[DEBUG] - [18:57:40.791]【IMCORE-netty-本机QoS】【QoS发送方】=========== 消息发送质量保证线程运行中, 当前需要处理的列表长度为1... | (QoS4SendDaemonRoot^doTaskOnece:149)
[DEBUG] - [18:57:40.791]【IMCORE-netty-本机QoS】【QoS发送方】指纹为6b643316-892c-46d7-8a0d-81705972cfe1的消息包重传次数已达1(最多1次)上限,将判定为丢包! | (QoS4SendDaemonRoot^doTaskOnece:170)
[WARN] - [18:57:40.791]【IMCORE-netty-本机QoS】【QoS发送方】指纹为6b643316-892c-46d7-8a0d-81705972cfe1的消息已成功从发送质量保证队列中移除(可能是收到接收方的应答也可能是达到了重传的次数上限),重试次数=1 | (QoS4SendDaemonRoot^remove:407)
[DEBUG] - [18:57:40.791]【DEBUG_QoS_S2C事件】收到系统的未实时送达事件通知,当前共有1个包QoS保证机制结束,判定为【无法实时送达】! | (MessageQoSEventS2CListnerImpl^messagesLost:41)
[DEBUG] - [18:57:42.921][IMCORE-netty]此客户端的Channel抛出了exceptionCaught,原因是:null,可以提前close掉了哦! | (ServerCoreHandler^exceptionCaught:157)
io.netty.handler.timeout.ReadTimeoutException
[INFO] - [18:57:42.921][IMCORE-netty]{uid:1}/192.168.3.55:7801

的会话已关闭(user_id=1)了... | (ServerCoreHandler^sessionClosed:306)
[INFO] - [18:57:42.921].......... 【0】[当前正在被关闭的session] session.hashCode=-255367145, session.ip+port=/192.168.3.55:7801

| (ServerCoreHandler^sessionClosed:311)
[INFO] - [18:57:42.921].......... 【1】[处于在线列表中的session] session.hashCode=-255367145, session.ip+port=/192.168.3.55:7801

| (ServerCoreHandler^sessionClosed:316)
[DEBUG] - [18:57:42.921]【DEBUG_回调通知OnUserLogoutAction_CallBack】用户:1 离线了! | (ServerEventListenerImpl^onUserLogoutAction_CallBack:99)

代码摘要:
@Override
protected void onStart() {
    super.onStart();
    new Thread(new Runnable() {
        public void run() {
            if (ChatHelper.getInstance().isLoggedIn()) {
                new LoginModelImpl().login(SessionManager.getInstance().getLastLoginUser(),
                        SessionManager.getInstance().getLastLoginPwd(), onLoginSucessObserver);
            }else {
                try {
                    Thread.sleep(sleepTime);
                } catch (InterruptedException e) {
                }
                startActivity(new Intent(SplashActivtiy.this, GuideActivity.class));
                finish();
            }
        }
    }).start();

}
public void login(final String name, final String pwd, final Observer onLoginSucessObserver) {
    Context context = ChatClient.getInstance().getContext();
    IMClientManager.getInstance(context).getBaseEventListener()
            .setLoginOkForLaunchObserver(onLoginSucessObserver);
    // 异步提交登陆id和token
new LocalUDPDataSender.SendLoginDataAsync(
            context
            , name
            , pwd)
    {
        /**
         * 登陆信息发送完成后将调用本方法(注意:此处仅是登陆信息发送完成
         * ,真正的登陆结果要在异步回调中处理哦)。
         *
         * @param code 数据发送返回码,0 表示数据成功发出,否则是错误码
         */
@Override
        protected void fireAfterSendLogin(int code)
        {
            if(code == 0)
            {
                L.d(LoginModelImpl.class.getSimpleName(), "登陆/连接信息已成功发出!");
            }
            else
{
                L.d(LoginModelImpl.class.getSimpleName(), "数据发送失败。错误码是:"+code+"!");
            }
        }
    }.execute();
}


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

标签:MobileIMSDK
上一篇:[已回复] MobileIMSDK sendDataS2C发送消息,客户端收不到?以下用法对吗?下一篇:[已回复] 关于网络差时MobileIMSDK的会话处理情况请教
推荐方案
评论 3
不清理内存是否有问题?
不清理内存就很正常
引用:zhuzhu2004 发表于 2018-01-14 21:21
不清理内存就很正常

那就排除MobileIMSDK代码问题,你把焦点放在为何小米清理内存后出现问题。MobileIMSDK的代码非常简单,所以你检查你代码看看是否APP有什么部分在内存被清楚时没有清理干净,导致MobileIMSDK被引用而未被一同清理掉,Android的activity这些东西的内存回收很复杂。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部