私はアンドロイドにUDPベースのチャットクライアントを構築することについて、学校の割り当てを持っています。さて、私の最初のアイデアは、サービスを開始するアクティビティを作成することでした。サービスはすべてのネットワークとアクティビティをすべての入力と出力を処理します。しかし、問題を発見しました。UDPチャットでアンドロイド
startCommand関数が開始され、socket.receiveを呼び出してネットワークメッセージの受信を開始しようとすると、サービスからサービスへの入力を渡すことができません(入力=ユーザーが送信したいメッセージ)。単にハングし、ANR例外がスローされます。私はそれを縛るだけで(受信が呼び出されないように)、それは魅力のように機能します。
多分私はこの問題に近づいていません。それとも、それはブロッキング受信呼び出しでサービスをバインドするために動作する必要がありますか?
コードを見ずに診断するのは難しいです。私の最初の推測は、サービスのスレッド(メインUIスレッド)でネットワーク機能を実行することです。これによりブロックされ、ANRが取得されます。ネットワークコールは、常に別のスレッド内で実行する必要があります。 –