如何在活动之外管理Socket.IO监听器

时间:2015-04-30 17:34:17

标签: java android android-activity socket.io

我有一个应用程序在Android上使用多个活动。 与服务器的连接由Socket.IO通道管理。

目前我正在普通类中初始化socket.on事件。

然而,由于这个“套接字”类在应用程序启动时初始化,因此在不同的活动之外,我无法直接从那里操纵我的视图。

我想避免在活动中编写我的听众,因为有些接收器是常见的(例如认证部分,在整个应用程序中都有效)。

这是方案:

  • Socket.class - >有方法来启动Socket.IO“on”侦听器。
  • 活动1:启动Socket.IO连接并注册监听器。
  • 活动2:应该由套接字类操作。

我不知道我是否清楚,不要犹豫再向我询问详细信息。

由于

Alex

2 个答案:

答案 0 :(得分:2)

我会做这样的事情:

1 - 创建一个界面:

public interface OnSocketListener {
    void method(); //add some methods to comunicate between your class and your activities
}

2 - 让你的听众从你的班级打来电话:

public class SocketClass {
    private OnSockectListener mListener;
    public void setListener(OnSockectListener listener) {
        mListener = listener;
    }

   private void someEvent() {
       if (mListener != nul) {
           mListener.onSomeEvent(Data data);
       }
   }
}

3 - 有一个实现监听器的基本活动并实现了通用实现,其余的没有实现,所以其他活动必须覆盖它:

public abstract class BaseActivity extends ActionBarActivity implements OnSocketListener {
    public void commonMethod() {
        //Some Implementation that it's common to all
    }
}

4 - 让您的其他活动继承该基础活动:

public class SomeActivity extends BaseActivity {
    //implements all the others methods
}

如果您想共享同一个套接字,可以将其设为单身:

public class SocketClass {
        private OnSockectListener mListener;
        private static SockectClass mInstance;

        private SocketClass() {
        }

        public SockectClass getInstance() {
            if (mInstance == null) {
                mInstance = new SockectClass();
            }
            return mInstance;
        }

        public void setListener(OnSockectListener listener) {
            mListener = listener;
        }

       private void someEvent() {
           if (mListener != nul) {
               mListener.onSomeEvent(Data data);
           }
       }
    }

答案 1 :(得分:1)

你冷创建一个BoundService并将套接字放在那里。您的活动将绑定到服务并调用方法。

或者您可以使用LocalBroadcastManagerEventBus与您的Socket.class进行通信。