android socket 回调,Android使用socket.io的connect事件没有回调

踩坑缘由:

最近项目上用到了即时性的需求,首先就想到了socket,服务端的node.js用的是socket.io,所以我就在github上找到了一个开源的socket.io项目,https://github.com/socketio/socket.io-client-java,集成使用方式可以上去阅读下代码。

下面说说使用过程中遇到的问题:

Socket mSocket= IO.socket(url);

mSocket.on(Socket.EVENT_CONNECT,connect);

mSocket.connect();

Emitter.Listener connect=new Emitter.Listener() {

public void call(Object... args) {

//连接成功后逻辑

}

};

上面的代码是正常的连接socket的流程,github上的项目demo给出的是在application里初始化socket,由于项目中用到的socket地址有两个,而且是在特定的界面才会使用到socket,所以本着初始化延迟的原则,写在了用到的activity的onResume()方法里,然后诡异的事情就发生了,在跳转到Activity后,socket的的connect的监听事件不起作用,socket.io-client-java的issues列表里面有很多都说在0.6.3后遇到了这个问题。

解决办法:

1. 自己项目中封装一个单例socket连接工具类,像这样:

public static PdfSocketUtil getInstance(){

if(pdfSocketUtil==null) {

pdfSocketUtil=newPdfSocketUtil();

}

return pdfSocketUtil;

}

public PdfSocketUtil() {

}

/**

* 初始化 Socket

*/

public void init() {

if(mSocket!=null&&mSocket.connected())

return;

try{

mSocket= IO.socket(Constants.PDF_SOCKET);

}catch(Exception e) {

e.printStackTrace();

}

}

2. 重点 :

在需要使用socket的时候,调用init() 初始化两次,并不是两次初始化。比如activity A跳转到 activity B,在Activity A跳转方法触发的时候,调用PdfSocketUtil.getInstance().init();在Activity B的onResume() 的方法里面再调用一次PdfSocketUtil.getInstance().init();

OK!完美解决。特此记录,希望帮助到遇到同样问题的小伙伴们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值