红花岗区住房和城乡建设局网站,高端营销型企业网站建设,linux空间做网站,北京网站模板建站好久没写东西#xff0c;夜深了来冒个泡#xff0c;先啰嗦几句。今天测试 Android App 的时候#xff0c;发现推到后台不到一分钟再唤醒直接闪退#xff0c;初次以为网络和GPS信号弱导致的#xff08;当时是在地铁上进行的测试#xff09;#xff0c;之后在网络与GPS 信…好久没写东西夜深了来冒个泡先啰嗦几句。今天测试 Android App 的时候发现推到后台不到一分钟再唤醒直接闪退初次以为网络和GPS信号弱导致的当时是在地铁上进行的测试之后在网络与GPS 信号较稳定的时候也闪退。。。于是出于好奇帮助同事解决一下打开AS进行连调结果连调情况下不会闪退。最后还是查日志锁定到了问题所在。
//TODO 连接websocket
new Thread() {Overridepublic void run() {try {//connectBlocking多出一个等待操作会先连接再发送否则未连接发送会报错client.connectBlocking();} catch (InterruptedException e) {e.printStackTrace();}}
}.start();
执行client.connectBlocking(); 会报错WebSocketClient objects are not reuseable。
看他代码并没有用到websocket的状态进行判断。 我们先来看下websocket的四种状态
public enum ReadyState {NOT_YET_CONNECTED, OPEN, CLOSING, CLOSED
}
在重连的时候没有排除之前没有连接上这种状态导致崩溃。
重点在这里经过以下调整就不会再崩溃了。
//TODO 连接websocket
if (client ! null !client.isOpen()) {new Thread(new Runnable() {Overridepublic void run() {if (client.getReadyState().equals(ReadyState.NOT_YET_CONNECTED)){try {client.connectBlocking();} catch (Exception e) {e.printStackTrace();}}else if (client.getReadyState().equals(ReadyState.CLOSING) || client.getReadyState().equals(ReadyState.CLOSED)){try {client.reconnectBlocking();} catch (InterruptedException e) {e.printStackTrace();}}}}).start();
}
还要注意的一个问题就是防止创建多条连接 注意创建逻辑哦
good luck