我正在开发和 XMPP 聊天应用程序,并且正在使用 aSmack。我有一个服务来保存 XMPP 连接、注册名册和数据包侦听器等。
目前,我的服务登录然后调用 connection.getRoster() 并在 Singleton 类中存储/更新所有 RosterEntrys(及其状态)。然后在主要活动中,我通过调用 Singleton.getInstance().getRosterEntrys() 获取所有这些 RosterEntrys 并填充一个 listView。
毫不奇怪,我得到了各种各样的竞争条件,这不是线程安全的。我正在考虑完全放弃 Singleton 的想法,但我不确定最好的方法。
以线程安全的方式将 Set 从服务传输到 Activity 的最佳方法是什么?我看到提到将 Singleton 与 SynchronizedSet 一起使用。这值得研究吗?还有其他建议吗?