gpt4 book ai didi

android - 在多个 Activity 中使用单个类

转载 作者:行者123 更新时间:2023-11-30 03:23:01 24 4
gpt4 key购买 nike

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

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

亲切的问候

最佳答案

您可以使用 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

关于android - 在多个 Activity 中使用单个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18763610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com