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

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

亲切的问候

最佳答案

您可以使用Application类,并以Singleton身份启动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

07-24 14:40