dhhAndroid / RxWebSocket

An auto reconnection-webSocket build with okhttp and rxJava
http://blog.csdn.net/huiAndroid/article/details/78071703
740 stars 114 forks source link

用的RxLifecycle来管理,但部分机型,长时间锁屏后,再次打开无法连接 #17

Closed njzhangsan2013 closed 5 years ago

njzhangsan2013 commented 6 years ago

用的这种方法,请问如何判断当前websocket是否连接正常,如果不正常怎么办,是否重新创建 RxWebSocketUtil.getInstance().getWebSocketInfo(Constant.SOCKET_URL) .compose(RxLifecycle.with(this).bindOnDestroy()) .subscribe(new WebSocketSubscriber()

dhhAndroid commented 6 years ago

@njzhangsan2013 你的需求应该是要保证在锁屏下保证WebSocket不断连。现在问题应该看你WebSocket在什么时候创建的,以及在长时间锁屏后,是否是系统杀进程了。部分机型出现这种问题,应该是系统内存回收导致的吧,你从这块入手看看,保活处理。或者你试试将这个WebSocket写在service里。然后用rxbus或者eventBus广播试试。

njzhangsan2013 commented 6 years ago

在锁屏断开没有问题,重要的是屏幕再次打开时,能重新自动连接上,这个很重要! 我用这个,我不知道怎么判断websocket是否连接,没有看到isConnect之类的方法,

dhhAndroid commented 6 years ago
    @Override
    protected void onResume() {
        super.onResume();
        RxWebSocketUtil.getInstance().getWebSocketInfo("ws://")
                .compose(RxLifecycle.with(this).<WebSocketInfo>bindToLifecycle())
                .subscribe(new WebSocketSubscriber() {
                    @Override
                    public void onOpen(@NonNull WebSocket webSocket) {

                    }

                    @Override
                    public void onMessage(@NonNull String text) {

                    }

                    @Override
                    public void onMessage(@NonNull ByteString bytes) {

                    }
                });
    }

如上,如果在锁屏状态不需要连接WebSocket,在onResume是注册WebSocket,用bindToLifecycle()管理生命周期。你在试一下。 @njzhangsan2013

dhhAndroid commented 6 years ago

试试以上方法,看看是否能解决问题,给我回复一下。 @njzhangsan2013