有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何管理socket。IO侦听器外部活动

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

目前我正在初始化socket。关于公共类中的事件

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

我希望避免在活动中编写我的侦听器,因为有些接收者对他们来说很常见(例如身份验证部分,在整个应用程序中都有效)

计划如下:

  • 插座。类别->;具有初始化socket的方法。IO“开”侦听器
  • 活动1:启动socket。IO连接并注册侦听器
  • 活动2:应该由socket类操作

我不知道我是否清楚,请毫不犹豫地询问我进一步的细节

谢谢

亚历克斯


共 (2) 个答案

  1. # 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
    }
    

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

    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);
               }
           }
        }
    
  2. # 2 楼答案

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

    或者,您可以使用套接字进行通信。使用LocalBroadcastManagerEventBus初始化