用户杀死应用程序后,Socket.io android socket.on 不起作用

Posted

技术标签:

【中文标题】用户杀死应用程序后,Socket.io android socket.on 不起作用【英文标题】:Socket.io android socket.on not work after user kill the app 【发布时间】:2016-08-15 01:10:15 【问题描述】:

我在 onCreate 中有 socket.on,它起初工作正常。 但是,当我杀死应用程序时,重新打开应用程序,服务器会收到来自其他人的消息,但 android socket.on 无法正常工作。 但是发射功能仍然有效。 有什么建议吗?

下面是大致代码。

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    try 
        mSocket = IO.socket("http://192.0.0.1/");
        mSocket.connect();
     catch (URISyntaxException e) 
        throw new RuntimeException(e);
    

    mSocket.on("chat message", onNewMessage);  // not working after kill the app and reopen.



private Emitter.Listener onNewMessage = new Emitter.Listener() 
    @Override
    public void call(final Object... args) 
        runOnUiThread(new Runnable() 
            @Override
            public void run() 
                JSONObject data = (JSONObject) args[0];
                String message;
                try 
                    message = data.getString("message");
                    Log.d("message", message );
                 catch (JSONException e) 
                    return;
                
        );
    
;
@Override
    public void onDestroy() 
        super.onDestroy();

        mSocket.disconnect();
        mSocket.off("chat message", onNewMessage);

Android客户端Socket.io版本为socket.io-client:0.7.0。 服务器是 Node.js 和 "socket.io": "^1.4.5"。

【问题讨论】:

我也有同样的问题。关注 关于这个问题的主要问题是,在android中,当应用程序被杀死或从任务中删除时没有回调功能,因为套接字没有正确关闭。最好的方法是在 onPause() 回调中关闭套接字(mSocket.disconnect()),但这仍然取决于您何时关闭打开的套接字。 【参考方案1】:

我发现了问题。 当我们终止应用程序并重新启动时,socket 将立即终止 socket 并创建一个新的。所以我们必须向服务器发出一个新事件来加入原来的房间。现在它工作正常。

【讨论】:

你能分享你的最终代码sn-p吗?我也面临同样的问题

以上是关于用户杀死应用程序后,Socket.io android socket.on 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

我的 Android 小部件被杀死,“不再需要 bellander.andro ....”

Socket.io 中的连接不稳定

使用 mern 堆栈和 socket.io 的聊天应用程序在发送超过 20 条消息后变慢

如何让用户加入他们的多个房间 socket.io

管理员单击按钮后为所有用户启动倒数计时器(react、redux、socket.io)

使用 socket.io 提供静态文件的问题