我的Android
应用正在使用AndroidAsync
库与Node.js
客户端连接到Socket.IO
服务器。套接字客户端是通过服务建立的。
我目前正在onResume
启动Socket.IO服务,并停在应用中每个onPause
的{{1}}。
这看起来效率非常低,因为每次按主页按钮或切换到应用程序中的其他活动时,我基本上都会停止套接字并重新创建一个新套接字。
处理上述有关保持套接字打开的要求的最佳方法是什么?
Activity
答案 0 :(得分:0)
我有部分解决方案(我认为不会解决你的第三个要求)。 我开始写一个简单的多人游戏,只是为了学习游戏编程。 我决定使用TCP连接(为什么?它的另一个问题......),当用户继续在每个Acitivty(登录 - >大厅 - >选择对手......)时,我必须保持连接打开, 我使用了包含连接套接字的Singleton patthern(双锁检查)。
伪代码
class ClientConnection{
private static ClientConnection conn = null;
Socket mSocket; // your socket
protected ClientConnection(){
mSocket = new Socket();
// mSocket.connect( bla bla bla )
}
public Socket getSocket(){
return mSocket();
}
public static ClientConnection getInstance(){
if(conn == null){
synchronized (LOCK) {
if(conn == null){
conn = new ClientConnection();
}
}
}
return conn;
}
}
答案 1 :(得分:0)
调查未解决的旧问题并找到了这个问题。 我认为最好的方法是使用自动启动的绑定服务。
使用bindService()可以将Activity绑定到onResume()或onStart()中,并让服务关闭连接并在没有客户端绑定时停止自身。
您可以在这里https://developer.android.com/guide/components/bound-services
中找到更多信息