Как уснуть нить, а затем прервать ее сон в любой случайный момент в Android
Разработка приложения реального времени, в котором я должен заставить поток перейти в спящий режим, как только я отправлю сообщение через SocketIo на сервер и дождусь ответа от сервера через SocketIo, а затем прерву спящий поток.
for (TruckEnquiry value : list.values()) {
String json = "any random string";
SocketIO.mSocket.emit("server", json);
try {
sleep(5000); // Need to break this sleep from the UI thread of Android.
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// Здесь мы получаем сообщение с сервера, и в этот момент я хотел бы возобновить приватный поток Emitter.Listener onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
// threadArray.get(perticular_thread).resume(); // Want to implement this.
}
});
}
};
У меня есть более одного потока в этом файле, и ThreadArray будет содержать все из них.
Заранее спасибо.
1 ответ
Вы не можете перевести один поток в спящий режим, потому что Thread.sleep(int) - это статический метод, который "переводит в спящий режим" все потоки в пуле потоков приложения.
Вы могли бы:
1) Получить ответ сервера в том же соединении, которое вы отправили данные JSON.
2) Прислушивайтесь к возможному ответу сервера, настроив в вашем приложении прослушиватель TCP (или UDP). Затем сервер установит соединение с вашим приложением с помощью URL-адреса "device_ip:listen_port", и приложение получит ответ.