У меня есть приложение для Android с большим количеством кнопок.Если кнопка нажата, она отправляет короткий cmd на сервер через сокет.
В настоящее время, когда нажимается кнопка, это добавляет cmd в список.У меня есть рабочий поток, который постоянно проверяет список на наличие cmds, и если он находит, открывает сокет и отправляет cmd.
Это не очень эффективно, поскольку рабочий поток постоянно работает.Что было бы лучшим способом улучшить это?
public class Arduino implements Runnable{
private static PrintWriter arduinoOutput;
private static Socket ss;
private static Queue<String> cmdsToSend=new LinkedList<String>();
private static String cmd;
public void run(){
while(true){
if(!cmdsToSend.isEmpty()){
cmd = cmdsToSend.poll();
System.out.println("send:"+cmd);
if(connect()){
arduinoOutput.println(cmd);
disconnect();
}
}
}
}
public static void sendCmd(String newcmd){
cmdsToSend.add(newcmd);
}
private static boolean connect(){
try {
ss = new Socket();
InetAddress addr = InetAddress.getByName("192.168.1.8");
int port = 23;
SocketAddress sockaddr = new InetSocketAddress(addr, port);
ss.connect(sockaddr, 2000);
arduinoOutput = new PrintWriter(ss.getOutputStream(),true); //Autoflush
return true;
} catch (UnknownHostException e) {
return false;
} catch (IOException e) {
return false;
}
}
private static void disconnect(){
arduinoOutput.close();
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Операция пользовательского интерфейса добавляет cmd, вызывая Arduino.sendCmd ("cmdName");Команды должны быть отправлены как можно быстрее, поэтому сон в цикле бесполезен.Любые идеи или примеры будут оценены.