web-dev-qa-db-ja.com

Android設計-ネットワーク用のサービスとスレッド

私はAndroidアプリ、ついに(イェイ))を書いています。このアプリには、永続的ですがユーザーが閉じることができるネットワークソケット(はい、複数)が必要です。 IRCクライアントの独自のバージョンを作成します。

ただし、私の設計上の問題は、Socket接続自体を実行する方法がわからないことです。ソケットをアクティビティレベルに置くと、アクティビティが表示されなくなった直後にソケットが閉じられ続けます(これも解決する必要のある問題です...しかし、私はそれを理解したと思います)...しかし、「接続サービス」、複数のインスタンスを実行できるかどうかを確認する必要があります(サービス、つまり...サーバー/ソケットごとに1つ)。それか、ソケット自体にスレッドを作成し、直接通信できる複数のスレッドを実行する方法が必要です(ある種のIDシステム)。

したがって、質問:ソケットとネットワークをサービスに配置し、アクティビティにそのサービスを消費させることは、「より良い」、または少なくともより「適切な」デザインパターンですか...または、ソケットをいくつかに直接結び付ける必要がありますUIアクティビティが所有するスレッド化されたプロセスで、サービスの実装にまったく煩わされませんか?ネットワークをUIスレッドに直接配置するよりもよく知っていますが、それは私が何とかやってきた限りです。

1
Nevyn

答えはService + Threadです。

socketActivityに入れないでください。 activityはUI用です。ユーザーが電話を回転させると再作成されます。ユーザーが電話を受けると、問題が発生する可能性があります。

ソケットをServiceに入れます。 1つまたは複数のアクティビティをServiceにバインドし、そのメソッドを使用できます。または、 メッセンジャー を使用してActivityServiceの間で通信することもできます。

Services on Android UIスレッドで実行されるため、Serviceではソケット通信用に独自のスレッドが必要になります。

3
LordRaydenMK