Java ソケット コードに少し問題があります。直接(!)ワイヤレス接続を介して、PCのJavaマルチスレッドソケットサーバーにデータを送信するAndroidクライアントアプリケーションを作成しています。正常に動作しますが、今では非常に電力を消費するため、モバイル アプリケーション用に改善したいと考えています。コード内の 2 つの特別な行を削除すると、モバイル デバイス (htc one x) の CPU 使用率はまったく問題ありませんが、接続の ping レートが高いなどのようです...
クライアントデータを受け取るサーバーコードスニペットは次のとおりです。
while(true)
{
try {
....
Object obj = in.readObject();
if(obj != null) {
Class clazz = obj.getClass();
String className = clazz.getName();
if(className.equals("java.lang.String")) {
String cmd = (String)obj;
if(cmd.equals("dc")) {
System.out.println("Client "+id+" disconnected!");
Server.connectedClients[id-1] = false;
break;
}
if(cmd.substring(0,1).equals("!")) {
robot.keyRelease(PlayerEnum.getKey(cmd,id));
}
else {
robot.keyPress(PlayerEnum.getKey(cmd,id));
}
}
}
} catch ....
ここでは、while ループでデータを送信するクライアント部分を示します。
private void networking() {
try {
if(client != null) {
....
out.writeObject(sendQueue.poll());
....
}
} catch ....
この理由を書くと、whileループが実行されるたびにデータを送信します.. sendQueueが空の場合、nullの「オブジェクト」が送信されます。これにより、ネットワーク トラフィックが「高く」なり、CPU 使用率が「高く」なります。BUT: すべての送信コメントはほぼ即座に受信されます。
コードを次のように変更すると:
while(true)
...
if(sendQueue.peek() != null) {
out.writeObject(sendQueue.poll());
}
...
CPUの使用率はまったく問題ありませんが、ラグが発生しています..コマンドが十分に速く到着しません..私が言ったように、(そのnullオブジェクトで)データを送信している場合、(CPUの使用率を除いて)正常に動作します実行。しかし、これは非常にラフなコーディング スタイルであると確信しています。ヒントはありますか?
私は何を間違っていますか??
ご協力いただきありがとうございます!
よろしくお願いします。