0

別のプロセスで実行されるサービスを実装しました。

このサービスには、ソケット接続がある別のスレッドが含まれています。このスレッドには run() があり、ポートに継続的にデータを送信しています。

私の問題は、スレッドで run() をトリガーした後、それとはまったく連絡が取れなくなりました。ソケットを開いているプログラムで、意識的にデータを送信していることがわかりますが、アイデアは、実行中に私がいるということでしたたとえば、送信するデータを変更できます。

外部スレッドでの私の実行は次のとおりです。

public void run()
{

        if(run) 
            {

            // Team and player names message is sent when entering in a game

            setBaseMessage();
            SendMessageToCOMPort(base_message + CalculateCRC(base_message));
            sleep();  // waits for 100 ms
           }
}

何が間違っているのか誰にも分かりますか?

4

1 に答える 1

0

私はあなたの問題をよく理解していませんでした。ソケット通信を行うサービスで別のスレッドを実行したいようです。さらに、スレッドがソケットを使用して送信するデータに影響を与えたいと考えています。

別のプロセスで実行されるサービスを実装しました。

まず第一に、Android サービスはデフォルトでは別のプロセスまたはスレッドで実行されていません。したがって、長時間実行される操作を実行するには、Java スレッドを使用して自分でマルチスレッドを開発し、実行したように run メソッドを実装する必要があります。

1 つのプロセスのスレッドは同じメモリを共有します。したがって、ソケット スレッドの動作に影響を与えるには、スレッド間で共有されるキューやリストなどのデータ構造を使用できます。たとえば、生産者と消費者のパターンを適用できます。プロデューサはデータを共有キューに渡します。コンシューマーは、キューからデータを消費して処理します。ただし、共有キューへのアクセスを同期する必要があることに注意してください。

問題を明確にし、問題を解決するためのアドバイスを提供できたことを願っています。

于 2012-11-17T11:37:21.190 に答える