2011-07-04 8 views
1

非常に有用な検索を行ったが、時には質問をする時間が来た。いくつかのガイダンスを探して複雑なアンドロイドマルチスレッドの問題

私はいくつかの調査を行うためにアンドロイド2.2単心電話を使用しようとしています。私はかなりの計算を行い、多くのデータを生成するアルゴリズムを実装しました。これらのデータは処理されなければならず、ソリューションは40msの時間枠内でクライアントアプリケーションに返され、クライアントからの新しい状態データで再度処理されます。また、計算結果はデー​​タログとしてSDカードに保存する必要があります。だから、マルチスレッドとアンドロイドの両方に新しい、私はどのような私のアプリで次の操作を行う必要があります:(注記、この携帯電話は、研究モードでは、電話機として使用するために意図されていない場合、電話機は飛行機モードオフにすることができるすべてのアプリはオフになり、起動していればUIの表示や対話は不要です...)

  • 入ってくるパケットを処理する必要がありますこれらのパケットは、プログラムがその計算を実行するために必要とする状態データです。これらのパケットは40msごとに到着するので、処理の開始をトリガするために到着を使用する予定です。
  • アルゴリズムが40msより長くかかっているかどうかを知り、そうであればそれをキャンセルし、それがオーバーランするシリアルポートにメッセージを送り返す必要があります。
  • tcpとadbを使用してシリアル接続経由で計算結果を返す必要があります。
  • 計算中間データをSDに記録する必要があります。これは、140k、40msごとにかなりのデータになります。
  • 私はすべての作品を一緒に得ることができませんでした。私は、一度に1つのコアがこれに追いついていく方法を頭に浮かべることはできません。

    ここに私の考えがあります、私が正しい道に向かうかどうか教えてください。バインドされたサービスを使用するので、私は

  • クライアントから来るTCPパケットを処理するためにサービスを開始

    1. :私は、私の問題を解決するために、あなたのために、この獣を打破する方法についてのみ任意のアドバイスを求めていないのですSDカードへの書き込みを処理するためのメインワーカースレッドへ
    2. この設定を前提とすると、このアルゴリズムは多少決定的になり、新しいtcpパケットを取得すると常に実行され、SDをプリエンプトすることができますバックグラウンドで書いていますか?

      なんてこったは...私の最初のプログラム

      感謝のためのシンプルなものを選んだはずです。

  • +0

    パケットを受信するたびに新しいスレッドを開始し、 -card、並行性の頭痛を避けるために。 – Marmoy

    答えて

    1

    はい、私はあなたが正しいと思う、あなたの最初のアプリケーションのための何かを簡単に選択する方が良いでしょう;) しかし、私があなたがしようとしていることを理解する限り、私はあなたが非同期マルチプロセッシングデータを処理して結果を渡したいデータがあります。私はHandlerThreadがまさにあなたが探しているものだと思います。それは内部にデータとMessages を受け取ることができます。それらをHandlerに送信し、それらをオーバーライドされたhandleMessage(Message m)メソッドで処理します。ですから、メッセージを受け取るたびに、時間 を記録し、最後のものがあなたの限界よりも古いかどうかを確認することができます。そうであれば、メッセージまたはキュー全体を投げたり、オーバーフローを起こしているシリアルポートにメッセージを送ることができます。 これは、サービスで提案するように実装できます。HandlerThreadをThread.PRIORITY_BACKGROUNDで開始して、すべてをSDに書き込むことができます。 Messengerをハンドラに適用するとメッセージを非常に快適に送信できます

    +0

    ありがとうございます。私はそのショットを与え、私の結果をここに掲載します。 – whatdidido