在多个活动中使用单个类

时间:2013-09-12 11:54:55

标签: android android-activity singleton

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

这会有用吗?有人有更好的解决方案吗?

亲切的问候

2 个答案:

答案 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?