1

私はXMPPチャットアプリケーションの開発に取り組んでおり、aSmackを使用しています。XMPP接続を保持し、名簿やパケットリスナーなどを登録するサービスがあります。

現在、私のサービスはログインしてからconnection.getRoster()を呼び出し、すべてのRosterEntry(およびそれらのステータス)をシングルトンクラスに格納/更新します。次に、メインアクティビティで、Singleton.getInstance()。getRosterEntrys()を呼び出して、これらのRosterEntryをすべて取得し、listViewにデータを入力します。

当然のことながら、私はあらゆる種類の競合状態に陥っていますが、これはスレッドセーフではありません。私はシングルトンのアイデアを完全に捨てることを考えていますが、そうするための最良の方法はわかりません。

スレッドセーフな方法でサービスからアクティビティにセットを転送するための最良の方法は何でしょうか?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 に答える