我实现了一个名为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