我实现了一个名为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
。
这会有用吗?有人有更好的解决方案吗?
亲切的问候
答案 0 :(得分: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
答案 1 :(得分:0)
如果将WebSocketClient对象存储在Application类中,则不必使用Singleton。您可以从活动中的getApplicationContext()方法获取它,并按原样使用它的方法。
话虽如此,如果您将实现Singleton,我建议在枚举中使用INSTANCE变量而不是getInstance()方法。您可以在以下网址找到示例:What is the best approach for using an Enum as a singleton in Java?