Comment exécuter une requête web dans son propre thread?

Je suis entrain de créer une application android qui a pour exécuter les requêtes web en arrière-plan et de gérer les données reçues et de modifier l'interface utilisateur en fonction de la réponse du serveur.

L'objectif de la publication des demandes et de traitement des données en arrière-plan est pour éviter le gel de l'interface utilisateur. Actuellement, cependant j'ai remarqué que l'interface utilisateur est le gel donc je ne suis pas sûr de la logique fonctionne comme il est censé le faire.

Voici la partie de code qui est censé publier des demandes et traiter les réponses dans son propre thread, puis transmettre les données pour l'interface utilisateur:

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);
}

La méthode sendRequest() est appelée à partir de l'activité principale, qui met en œuvre ServerResponseHandler. Je suppose que la requête est exécutée dans son propre thread, et en appelant

responseHandler.onProductsResponse(produits);

la liste des produits (données à partir du web) est passé à l'activité principale. De toute façon en raison de mauvaises performances, je serais reconnaissant si quelqu'un pouvait corriger tout problème possible dans la logique ci-dessus ou suggérer une autre (mieux) option.

source d'informationauteur Niko Gamulin