【问题标题】:How to manage Socket.IO listeners outside activities如何在活动之外管理 Socket.IO 侦听器
【发布时间】:2015-07-10 12:59:55
【问题描述】:

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

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

但是,由于这个“socket”类是在应用启动时初始化的,所以在不同的活动之外,我无法直接从那里操作我的视图。

我想避免在活动中编写我的侦听器,因为某些接收器对它们来说是通用的(例如身份验证部分,在整个应用程序中都有效)。

方案如下:

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

我不知道我是否清楚,请随时向我询问更多详细信息。

谢谢

亚历克斯

【问题讨论】:

  • 为什么没有实现事件常用方法和监听器的基本活动类?
  • 我有我的 MainActivity 课程。它是否可以访问与活动相关的视图和布局?
  • 我实际上在考虑一个抽象活动,其中包含一些已实现的方法和一些您可以在其他活动中扩展的抽象方法。

标签: java android android-activity socket.io


【解决方案1】:

我会这样做:

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);
           }
       }
    }

【讨论】:

  • 您好,效果很好。但是,由于侦听器仅从一个活动而不是所有活动设置,我该如何管理多个活动的公共套接字的问题?例如,我有一个返回配置文件信息的套接字,可以很好地通过多个活动来操作数据和视图。
  • 为什么不用socket做单例?
  • 好主意,去看看。
  • 我仍在测试最好的方法...仍然锁定在我的架构中以管理多个套接字。但是是的,它看起来像在基础工作......将其标记为已解决。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2016-12-31
    • 2021-06-01
    相关资源
    最近更新 更多