0

TCP 経由でサーバーと通信する Android アプリを構築しています。実装についていくつかのアイデアがありますが、どの方法が最適かわかりません。私はこれが初めてで、新しいことを学ぶにつれてデザインが常に進化しているため、目標を達成するためのソリューションを最適に実装する方法についてアドバイスを求めています。

目標: 次のことができるようになります。

  1. サーバーにデータを送信する
  2. サーバーにデータを送信し、サーバーの応答を読み取ります。

    • 私が送信する情報には、サーバー情報を提供するためのものと、サーバーから情報を要求するためのものがあります。

可能な実装:

  • Thread Run() メソッドは、送信キューに送信するものがあるかどうかを確認し (送信している場合は送信する)、再度読み取るものがあるかどうかを確認することで常にループします。
    • これはバッテリーを消耗させたり、CPUを燃やしたりしますか?
  • 送受信するたびに新しいスレッドを作成し、「送信」または「送信+受信」を実行したらスレッドを終了させます
    • スレッドの相互作用を 1 つのソケットと同期するにはどうすればよいですか? このスレッドが終了するまで、次のスレッドの作成をブロックしますか?
  • スレッドを作成し、書き込みまたは書き込み + 読み取りが必要になるたびに、そのスレッドで送信または送信 + 受信メソッドを呼び出します
    • バッテリー/CPUを燃やさずにスレッドを存続させるにはどうすればよいですか?
    • キューを使用してデータ送信のリクエストを処理する必要がありますか?また、現在の読み取り/書き込みが完了するまでキューからの読み取りを同期する必要がありますか?

潜在的な問題に関する追加のポインタ、リンク、または警告をいただければ幸いです。私はこれを始めたばかりなので、サンプルコードは特に感謝しています。ありがとうございました。

4

1 に答える 1

2

これを達成する方法はいくつかあると指摘したように、それぞれに長所と短所があります。

接続を開いたままにするか、頻繁に再送信すると、バッテリーの持続時間に間違いなく違いが生じます。これがあなたの場合であるならば、私はいくつかの要求を特定の時間ごとに1つにバッチ処理することを考えます。これについての興味深い記事があります。

私は数日前に、私が非常に頻繁に使用しているアプローチについて書きましたが、これは非常にうまく機能します。見た目と同じくらい単純な場合もあれば、AndroidアプリのAPI通信エンジン全体の基礎を設定する場合もあります。それはあなたのニーズ次第です。基本的には、バックグラウンドスレッドのプールでリクエストを実行し、サービスによって制御され、アクティビティ内または必要なものすべてに通知されます。新しいリクエストをプッシュする必要があるときはいつでも、それをキューに入れてコールバックを設定するのと同じくらい簡単です。あなたがここでそれがあなたのために働くかもしれないと思うなら、私はあなたにこれに深く潜っている一対のリンクを残します。

http://ugiagonzalez.com/2012/07/02/theres-life-after-asynctasks-in-android/ http://ugiagonzalez.com/2012/08/03/using-runnables-queues-and-executors- to-perform-tasks-in-background-threads-in-android /

それが役に立てば幸い。

于 2012-08-12T20:14:20.933 に答える