1

我实现了一个名为的类WebSocketClient,它提供了打开和连接到 websocket、通过 websocket 发送数据等的功能......现在我想在我的活动中使用这个类。为了获知来自 websocket 的传入消息,我创建了一个WebsocketListener可以在其中注册的消息,WebSocketClient因此希望通过 Websocket 进行通信的活动将实现此接口并自行注册。问题是,如何WebSocketClient在多个活动中使用?我的第一个想法是将WebSocketClient类实现为. 这是实现我想要的好方法吗?所以如果我在我会打电话SingletonWebSocketClient.getInstance()WebSocketListenerActivity AWebSocketClient.getInstance().register(this),当我切换到下一个时,Activity B我还必须调用WebSocketClient.getInstance().register(this)这会将当前侦听器更改为当前活动活动。这样我就可以WebSocketClient在每个活动中使用。

这行得通吗?有人有更好的解决方案吗?

亲切的问候

4

2 回答 2

1

您可以使用该Application课程并将您的WebSocketClient课程作为单身人士开始。

public class WebSocketClientManager implements OnCloseListener {

 private WeakHashMap<? extends BaseUIListener, Integer> uiListenerss;
 private final static WebSocketClientManager instance;
 static {
    instance = new WebSocketClientManager();
 }

 public static WebSocketClientManager getInstance() {
    return instance;
 }

 @Override
   public void onCloseingTheApp() {
   // do stuff
 }

 // methods
  getListeners 
  setListener
}

你也可以让Application类控制所有BaseUIListener。然后在Activity´s onResume()你所做的所有事情中:

 Application.getInstance().addUIListener(OnSomeChangedListener.class, this);

当它有话要说WebSocketClientManager时,它会这样做

for (OnSomeChangedListener someChangedListener: Application.getInstance().getUIListeners(OnSomeChangedListener.class))
     someChangedListener.OnSomeChanged("This just happend");

这里有一个很好的例子: xabber Application class

于 2013-09-12T12:21:18.330 回答
0

如果您将 WebSocketClient 对象存储在 Application 类中,则不必使用 Singleton。您可以从活动中的 getApplicationContext() 方法中获取它并按原样使用它的方法。

话虽如此,如果您要实现 Singleton,我建议在枚举中使用 INSTANCE 变量而不是 getInstance() 方法。您可以在以下网址找到示例:在 Java 中使用枚举作为单例的最佳方法是什么?

于 2013-09-12T12:20:18.957 回答