Имеется приложение, логика которого следующая: 1) Приложение подключается к серверу. 2) При нажатии на кнопку приложение читает данные от сервера.
Проблема в том, что приложение при нажатии на кнопку чтения данных приостанавливается на неопределенное время.
К примеру сервер отвечает строкой: {whats,need}
Приложение читает ответ, но выполнение продолжается только тогда, когда приходит следующее сообщение, либо происходит отключение.
Код чтения:
public String read() throws Exception{
String message = "";
if (inputStream.available()>0) {
byte[] buffer = new byte[BUFFER_SIZE];
inputStream.read(buffer,0,inputStream.available());
message = new String(buffer);
}
return message;
}
Инициализация inputStream:
InputStream inputStream;
inputStream = clientSocket.getInputStream();
Как избавиться от этой болячки?
Объясняю: запускать что-то тяжелое в главном потоке приложения (он же UI поток) — нельзя. В тяжелые задачи можно отнести: чтение из БД, чтение из сервера, любая работа с файлами и длительные расчеты.
Для выполнения кода в других потоках есть такие варианты решения проблемы:
Service
, но предназначенный для выполнения тяжелых задач в фоне. Вполне неплохая вещь, если Вы не хотите получать результат обратно в приложение (как, например, при чтении из БД — нужно получить результат в виде массива для отображения в приложении), а просто выполнить задачу и забыть (скачай файл в телефон и просто сказать пользователю "Готово!").Activity
и, что тоже интересно, не захватывает контекст, хоть и использует его.subscribeOn
и observeOn
— вызывается просто, в связке с лямбдами от Retrolambda выглядит красиво. Всего в пару строк указываете в каком потоке и что выполнять. Но, опять же, нужно быть осторожно, чтобы не захватить контекст лямбдой (из-за особенностей работы Retrolambda).AsyncTask
, если нужно написать быстро и для себя (исключительно для себя) — подходит (в реальном приложении использовать строго запрещаю, но для себя и для имитации работы — незаменимая вещь).Если правильно и надежно — нужно использовать Loader
или RxJava
. Если быстро, но ненадёжно и из палок с т.п. вещами — Thread
+ запрет смены ориентации устройства.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Проблема в том, что на сайте написан на wordpress не получается задать чтобы пункт подменю был ниже самого основного менюКогда я задаю отступ...
Я об этой функции в Firefox:
Доброго времени сутокВ интернете множество сайтов, на которых что-то продаётся