用于保持连接活动的Android Socket.IO最佳实践

时间:2014-04-22 22:53:08

标签: android sockets service socket.io

我的Android应用正在使用AndroidAsync库与Node.js客户端连接到Socket.IO服务器。套接字客户端是通过服务建立的。

  • 应用程序打开时,套接字需要保持打开/连接
  • 当应用未打开时,套接字可以关闭
  • 在应用未打开时,套接字需要保持打开状态有一个例外

我目前正在onResume启动Socket.IO服务,并停在应用中每个onPause的{​​{1}}。

这看起来效率非常低,因为每次按主页按钮或切换到应用程序中的其他活动时,我基本上都会停止套接字并重新创建一个新套接字。

处理上述有关保持套接字打开的要求的最佳方法是什么?

Activity

2 个答案:

答案 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

中找到更多信息