Я создаю приложение для Android, которое должно выполнять веб-запросы в фоновом режиме, а затем обрабатывать полученные данные и изменять пользовательский интерфейс в соответствии с ответом сервера.
Цель публикации запросов и обработки данных в фоновом режиме заключается в том, чтобы избежать замораживания пользовательского интерфейса. В настоящее время, однако, я замечаю, что пользовательский интерфейс замерзает, поэтому я не уверен, что логика работает так, как предполагается.
Вот часть кода, которая должна отправлять запросы и обрабатывать ответы в своем потоке, а затем передавать данные в GUI:
public class ServerConnection {
Queue<String> requests;
...
DefaultHttpClient httpClient;
HttpHost targetHost;
Handler handler;
ServerResponseHandler responseHandler;
Activity activity;
public ServerConnection(Activity activity){
this.activity = activity;
this.responseHandler = (ServerResponseHandler) activity;
httpClient = new DefaultHttpClient();
targetHost = new HttpHost(TARGET_DOMAIN, 80, "http");
requests = new LinkedList<String>();
}
private Runnable requestSender = new Runnable(){
@Override
public void run() {
if(!requests.isEmpty()){
String requestString = requests.remove();
HttpGet httpGet = new HttpGet(requestString);
httpGet.addHeader("Accept", "text/xml");
String encodingString = "testuser:testpass";
String sEncodedString = Base64Coder.encodeString(encodingString);
try{
String sContent = fetchURL(requestString, sEncodedString);
XMLParser xmlParser = new XMLParser();
List <Product> products = xmlParser.getProducts(sContent);
responseHandler.onProductsResponse(products);
}
catch(Exception ex){
Log.e(TAG, ex.getMessage());
}
}
}
};
public void sendRequest(String requestString){
requests.add(requestString);
handler = new Handler();
handler.post(requestSender);
}
Метод sendRequest() вызывается из основного действия, которое реализует ServerResponseHandler. Я предполагаю, что запрос выполняется в своем потоке и вызывается
responseHandler.onProductsResponse(продукты);
список продуктов (данные из Интернета) передается основной деятельности. В любом случае из-за низкой производительности я был бы признателен, если бы кто-нибудь мог исправить любую возможную проблему в логике выше или предложить любую другую (лучшую) опцию.