私はAndroid開発の初心者で、Javaサーバーに接続してそこからいくつかのパケットを送受信するAndroid UDPクライアントを実装しようとしています.このプロセスでは、いくつかのデータを収集します(ラウンドトリップ遅延など) 、その特定のネットワークの QoS を測定するために使用されます。Java スレッドを使用して接続とデータの送受信を実装しようとしましたが、2 つ以上のスレッドを使用しようとすると、アプリケーションがクラッシュしてハングします。だから私は代替品を探しています。このサイトや他のリンクを調べていると、Android では AsyncTask、Handler などを使用して複数のスレッドを実装できることがわかりました。また、Service クラスはアプリでバックグラウンド サービスを実行するのにも役立つことがわかりました。これらのうち、どのアプローチが私の目的を達成するのに最適かを提案してください。前もって感謝します。
2 に答える
Android のマルチスレッド化を行う方法に大まかに適用できる正解は 1 つではありません。特定のニーズに基づいて、それにアプローチするにはいくつかの異なる方法があります。
Android で長時間実行され、ブロッキング呼び出しが行われると、アプリケーションがクラッシュします。
ただし、最も一般的な解決策は AsyncTask を使用することです。たとえば、アクティビティ内の一部の XML データに対して Web API エンドポイントを呼び出したい場合、この場合は AsyncTask を使用して、doInBackground 内から呼び出しを開始します。
ただし、待機時間が長い場合、または不明な待機時間である可能性がある場合、これは適切な解決策ではありません。または、メッセージ キューイング サービスなど、常に待機が発生する状況。このような状況では、Service クラスの拡張に基づいて別のアプリを作成するのが最適な場合があります。次に、Web サービスと通信する場合と同様の方法で、プライマリ アプリケーションからサービスとの間で通知を送受信できます。
AasyncTask を使用してこれを行うことができます。前述のように、サービスも役立つ場合があります。アプリケーションにバックグラウンドで必要なことを何でもさせることができます。ユーザーがインターフェイスでアプリケーションを使用する必要がある場合は、AsyncTask を使用してクラッシュを回避する必要があります。