1

我正在开发和 XMPP 聊天应用程序,并且正在使用 aSmack。我有一个服务来保存 XMPP 连接、注册名册和数据包侦听器等。

目前,我的服务登录然后调用 connection.getRoster() 并在 Singleton 类中存储/更新所有 RosterEntrys(及其状态)。然后在主要活动中,我通过调用 Singleton.getInstance().getRosterEntrys() 获取所有这些 RosterEntrys 并填充一个 listView。

毫不奇怪,我得到了各种各样的竞争条件,这不是线程安全的。我正在考虑完全放弃 Singleton 的想法,但我不确定最好的方法。

以线程安全的方式将 Set 从服务传输到 Activity 的最佳方法是什么?我看到提到将 Singleton 与 SynchronizedSet 一起使用。这值得研究吗?还有其他建议吗?

4

2 回答 2

2

我通过在 Service 和 Activity 上注册 BroadcastListener 解决了这个问题。然后我在意图之间来回传递 ArrayList。这已被证明是在活动或服务之间传输信息集合的一种非常干净和有效的方式

于 2012-12-10T18:49:02.377 回答
0

从服务到 UI,我会使用 runOnUI 方法。

“最佳”是主观的,出于某种原因,有人会说方法 1,而不是其他原因方法 2。

您可以开发一种同步方法。

我正在使用 AsyncTask-s 从网络获取消息到 UI,您可以执行onPostExecute在 UI 线程上运行的各种操作,例如调用同步方法。

我希望它有帮助!

于 2012-12-05T15:14:26.073 回答