2

私は、最大20個のソケットを(並列に)開き、4秒ごとに各ソケットから更新を取得する(そしてそれぞれUIを更新する)必要があるAndroidアプリケーションを開発しています。

これは私がこれまでに試したことです:

  1. ソケット接続ごとにTimerTaskを作成し、ハンドラーとメッセージを使用して更新をUIスレッドに投稿します。 このソリューションの問題点:約15個のTimerTasks(それぞれが異なるスレッド上にある)を作成した後、私のアプリケーションのUI(本当に単純)が機能し始めます。2番目の問題は、各ソケットからの更新がリモートで同期されていないことです(たとえば、1つは4秒ごとに更新され、もう1つは20秒ごとに更新されます)。
  2. 非同期ソケットチャネルとセレクターを使用してすべての通信を処理する1つのスレッドを作成します。このソリューションの問題点: JavaにはSSLのサポートが組み込まれておらず(SSLChannelSocketではなくSSLエンジンを提供しているだけです)、SSLソケットが必要です。

提案/その他の解決策はありますか?

4

1 に答える 1

0

アプリの NIO (別名ノンブロッキング I/O) に興味があると思います。これにより、複数のクライアントをはるかに効率的に処理できるようになります。この記事を参照してください。効率的かつ適切に処理する方法についての情報が得られます。

これを処理する方法の例は、たとえばGoogle の Anymote ライブラリにあります。彼らは特に私がコメントで言及したことを行います - 読むための専用スレッド:

  mReceiverThread = new Thread(new Runnable() {
  public void run() {
    boolean available = true;
    while (available) {
      available = getNextRemoteMessage();
    }
    stop();
  }});

ただし、直接コールバックを使用します (したがって、インターフェイス メソッドは、Handler.

幸運を!

于 2012-11-05T12:00:52.373 に答える