后台出现连接断开问题

你这是在 Android 环境里,还是在纯 java 环境下遇到的问题?
在 Android 环境下,我们是通过一个后台服务来保持客户端与即时通讯云端的长链接的,但是从 Android 8.0 之后系统收紧了权限,会很快中止进入后台的应用的所有后台网络活动(也就是切断所有网络连接),这样就会导致即时通讯 SDK 依赖的网络连接中断。我们的 SDK 会在网络恢复的时候尝试自动重建连接,但是这需要一定的时间,应用层可以通过 AVIMClientEventHandler 接口来监听网络状态变化,具体可参考文档: https://leancloud.cn/docs/realtime-guide-beginner.html#hash262557401

对于 Android 应用来说,网络的变化是非常常见的,开发者要注意监听这些状态变化,不能假定网络是一直可用的。

java 后台服务与leancloud长连接断开AVIMClient 的连接状态断开 是等价的。

	AVOSCloud.setRegion(AVOSCloud.REGION.EastChina);
    AVOSCloud.setLogLevel(AVLogger.Level.DEBUG);
    AVOSCloud.initialize(this.appId, this.appKey);
    AVIMOptions.getGlobalOptions().setTimeoutInSecs(30);
    AVConnectionManager manager = AVConnectionManager.getInstance();
    manager.autoConnection();
    manager.startConnection(new AVCallback() {
        @Override
        protected void internalDone0(Object o, AVException e) {
            if (e == null) {
                log.info("成功建立 WebSocket 链接");
               
            } else {
                log.info("建立 WebSocket 链接失败:" + e.getMessage());
                

            }
        }
    });

    AVIMClient.setClientEventHandler(ZxbClientEventHandler.getInstance()); 
    AVIMMessageManager.setConversationEventHandler(new ZxbIntelConversationEventHandler());
    AVIMMessageManager.registerDefaultMessageHandler(new ZxbIntelMessageHandler());
    AVIMOptions.getGlobalOptions().setMessageQueryCacheEnabled(false);




    -------------------------------handler 如下所示--------------------------------


    package com.zbintel.zxb.service.imms.biz.handler;

	import cn.leancloud.im.v2.AVIMClient;
	import cn.leancloud.im.v2.AVIMClientEventHandler;

	public class ZxbClientEventHandler extends AVIMClientEventHandler {

	    private static ZxbClientEventHandler eventHandler;

	    public static synchronized ZxbClientEventHandler getInstance() {
	        if (null == eventHandler) {
	            eventHandler = new ZxbClientEventHandler();
	        }
	        return eventHandler;
	    }

	    private ZxbClientEventHandler() {
	    }


	    private volatile boolean connect = false;

	    /**
	     * 是否连上聊天服务
	     *
	     * @return
	     */
	    public boolean isConnect() {
	        return connect;
	    }


	    @Override
	    public void onConnectionPaused(AVIMClient avimClient) {
	        System.out.println("下线"+avimClient.getClientId());

	    }

	    @Override
	    public void onConnectionResume(AVIMClient avimClient) {
	        System.out.println("上线"+avimClient.getClientId());

	    }

	    @Override
	    public void onClientOffline(AVIMClient avimClient, int i) {
	        System.out.println("下线"+avimClient.getClientId());
	    }

}

您好,我还有一个问题请教一下。我是纯JAVA环境。初始化方法如上所示,网络断开的时候可以接收到onConnectionPaused()方法的回调请求。然后我恢复网络,等了几分钟,一直没有接收到onConnectionResume()方法的回调。 麻烦看一下我的初始化代码是否存在问题。