我正在使用一个使用两个线程来读取数据并将数据发送到服务器的应用程序。每个线程运行一个while循环;一个 que 包含一组命令,这些命令被发送到服务器。这样我就可以将大量的命令排成队列并一一发送到服务器。
命令发送者是这样的
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;
}
}
读取循环看起来像这样
while (inputStream.read() > -1)
结果,该应用程序最终占用了手机 50% 的处理能力。关于如何优化套接字侦听和数据发送有什么建议吗?
注意:是的,我知道我正在对队列使用 try catch 而不是 if 语句来检查队列是否为空。我确信抛出错误无助于优化,但我认为它不会将处理器推到 50%。如果您需要更多信息,请告诉我。