Chamada de serviço da Web encadeada

Estou solicitando informações de um serviço da web no meu aplicativo para Android. O serviço da web retorna uma lista de itens, cada item tendo uma imagem base64 e algumas informações

Primeiro método: basta acessar o serviço web e obter o resultado. Isso significa congelamento da interface do usuário até que os dados sejam baixados. Não é uma boa solução

Segundo método: coloque o download dos dados em um encadeamento e exiba uma barra de progresso com uma mensagem.

 private void StartGettingData()
    {
        viewInfo = new Runnable(){
            public void run() {
                getData(); //from the web service
            }
        };
        Thread thread =  new Thread(null, viewInfo, "MagentoBackground");
        thread.start();
        progressDialog = ProgressDialog.show(TracksListActivity.this,    
              "Please wait...", "Retrieving data from WEB...", true);
    }

    private void getData(){
    {
      get data from web service into a list and then 

      runOnUiThread(returnRes);
    }

     private Runnable returnRes = new Runnable() {

     public void run() {
         populate the listview adapter with info from the web service result list and

         progressDialog.dismiss();
         generalTrackInfoAdapter.notifyDataSetChanged();
     }
 };

Isso mostra uma boa imagem de carregamento e a mensagem. O usuário terá que esperar até que todo o download esteja concluído. Não sei como cancelar o segmento getdata ().

Terceiro método: eu gostaria de ter algo como, o usuário pressiona um botão para obter dados, um thread faz o download de itens por item do serviço da Web e mostra imediatamente na lista. O uso sempre pode cancelar a solicitação pressionando o botão.

Mas como fazer isso ? Ou existe outra maneira ?

questionAnswers(1)

yourAnswerToTheQuestion