私は、サーバにデータを読み込んで送信するために2つのスレッドを使用するアプリケーションを開発中です。各スレッドはwhileループを実行します。 queは、サーバに送るためにdequedされるコマンドのqueを保持します。このようにして、私は多数のコマンドを整列させることができます。これらのコマンドは、dequedされ、1つずつサーバに送られます。ネットワークデータの送信に使用されるAndroidスレッドの最適化
コマンドの送信者は、読み出しループが結果としてそのような
while (inputStream.read() > -1)
ように見え、アプリケーションが携帯電話の処理能力の50%を占めてしまうような
class writeThread extends AsyncTask<Object, Object, Object>
{
byte[] buffer;
LittleEndianDataOutputStream outputStream;
@Override
protected void onPreExecute()
{
}
@Override
protected Object doInBackground(Object... params)
{
try
{
buffer = new byte[4096];
outputStream = new LittleEndianDataOutputStream(dataHolder.connection.getOutputStream());
try
{
dataHolder.flags latestFlag;
while (true)
{
try
{
latestFlag = dataHolder.sendFlags.remove();
ByteBuffer sendBytes = ByteBuffer.allocate(128);
sendBytes.order(ByteOrder.LITTLE_ENDIAN);
switch (latestFlag)
{
case sendDataRequest:
sendBytes.putInt(20);
outputStream.write(sendBytes.array());
break;
case getSelectedData:
sendBytes.putInt(21);
sendBytes.put(dataHolder.latestSelected.getBytes());
outputStream.write(sendBytes.array());
break;
case disconnect:
sendBytes.putInt(254);
sendBytes.put(dataHolder.latestSelected.getBytes());
outputStream.write(sendBytes.array());
break;
}
}
catch (NoSuchElementException ex){}
}
}
catch (IOException ex) {}
}
catch (Exception ex){};
return null;
}
}
通りです。ソケットリスニングとデータ送信を最適化する方法に関する提案はありますか?
注:キューの空きがないかどうかを確認するif文の代わりに、キューのtry catchを使用しています。私は投げているエラーが最適化を助けていないと確信していますが、私はそれがプロセッサを50%に押し上げるとは思わないのです。もう情報が必要な場合はお知らせください。
Lol私はちょうど私が未使用の4kbのバッファを周りに座っていることを知った。前のコードから残っていなければなりません。 –