Необычная реализация интерфейса
Добавлено: 04 мар 2015, 12:22
Нужна помощь. Этот код я нашел на просторах интернета как один из основных вариантов реализации callback для работы с сокетом в мультипоточном приложении. Суть какова: посылается запрос на сервер (из мэин потока в свой поток, в котором реализован сокет), при этом приложение работает как обычно. И когда от сервера приходи ответ на запрос (а данные приходят не сразу а с задержкой, время которой не известно и ограничено константой таймаута) должен выполниться обределенный код в мэйн потоке (к примеру запись данных в бд и вывод их во вью). Запросов на сервер много и посылаются разными методами (в onCreate(), по таймеру, по экшену), и ответы соответственно на них разные и обработка их тоже индивидуальная. Оригинал взят отсюда - http://stackoverflow.com/questions/3398 ... in-android . Код ниже это уже измененный мной. Все работает. Но я не понимаю КАК оно работает. Знающие люди объясните пожалуйста как это работает. И если можно ваши варианты решения данного вопроса в андроиде. Спасибо)
Код: Выделить всё
public interface Callback{ // интерфейс обратной связи
void doCallback(String i);
}
////////////////////////////////////
public class Worker{ // класс в котором будет выполнятся процедура обработки данных с неизвестным временем выполнения
Callback callbackVar;
String workString;
public void myMethod(String str){
this.callbackVar.doCallback(str);
}
public void toDo{ // это та самая процедура
this.workString = "here is new data";
this.myMethod(workString);
}
}
//////////////////////////////////////
public class MyClass{ // основной класс в котором вы работаете
Worker worker = new Worker();
String sendData, receivedData; // ну тут все ясно
public void toSend(String str){ // процедура, которая засылает данные на длительную обработку в класс Worker
//code here to send some data somewhere
}
public void myTask(){ // наша основная процедура
this.sendData = "data to send";
this.toSend(sendData); // посылаем данные..
this.worker.myMethod = new Callback(){ // эта штука сработает после того, как сработает "та самая процедура" в классе Worker
@Override
doCallback(final String dataCallback){
this.receivedData = dataCallback; // => receivedData = "here is new data"
}
}
}
}