-1

私はAndroid上でUDPベースのチャットクライアントを構築することについて学校の課題を持っています。さて、私の最初のアイデアは、サービスを開始するアクティビティを作成し、サービスがすべてのネットワークを処理し、アクティビティがすべての入力と出力を処理するようにすることでした。しかし、問題が見つかりました。

startCommand関数が開始してsocket.receiveを呼び出してネットワークメッセージの受信を開始するようにサービスを開始しようとすると、アクティビティからサービスに入力を渡すことができるようにサービスをバインドできません(入力=ユーザーが送信するメッセージ送信したい)。ハングし、ANR例外がスローされます。バインドするだけの場合(receiveが呼び出されないようにするため)、チャームのように機能します。

たぶん私はこの問題に正しく取り組んでいません。または、受信呼び出しをブロックしているときにサービスをバインドするように機能する必要がありますか?

4

1 に答える 1

1

私はかつてこのようなことをしました。他のデバイスを追跡するために必要なデータを取得し、それを asyncTask にフィードして、基本的にバックグラウンドで接続を維持する Runnable を開始しました (この方法では、バインディングについて心配する必要はありません)。独自のソケット接続を作成する代わりに、Apache MinaまたはNettyを使用する方が簡単です。(車輪を再発明する必要はありません)。バックグラウンドで実行されているセッションからのデータ転送を List または Queue に渡し、asyncTask でそれをチェックし、それに応じて UI を更新するだけで、チャットの準備が整います。たぶんこれは最善の方法ではありませんが、私にとってはうまくいきました。これが役立つことを願っています。

于 2012-02-24T03:04:13.210 に答える