线程Web服务调用

我正在从我的android应用程序中的Web服务请求信息。 Web服务返回一个项目列表,每个项目都有一个base64图像和一些信息

第一种方法:只需访问Web服务并获得结果。 这意味着冻结用户界面直到下载数据。 不是一个好的解决方案

第二种方法:将数据下载放入一个线程中,并显示带有消息的进度条。

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

这显示了一个不错的加载图片和消息。 用户必须等到所有下载完成。 我不知道如何取消getdata()线程。

第三种方法:我想要的是,用户按下一个按钮来获取数据,一个线程从Web服务逐项下载并立即显示在列表中。 使用可以随时按下按钮来取消请求。

但是,如何做到这一点? 还是有另一种方式?


您可以使用AsyncTask进行线程化,基本知识如下:无痛线程,例如:Multithreading For Performance(图像下载程序)。

由于使用类线程或可运行的接口,您的代码变得更加复杂且难以阅读。 当您执行需要频繁UI更新的复杂操作时,情况会变得更糟。

AsyncTask的目标是为您管理线程管理。

基本结构是:

public class DownloaderTask extends AsyncTask<String, String, String>{

    protected void onPreExecute(){}

    protected String doInBackground(String....args){
        //do something in background
    }

    protected void onProgressUpdate(String str){}

    protected void onPostExecute(String result){
         //..update ui
    }
}

...开始你的任务,例如:

public void onClick(View v){
     new DownloaderTask().execute("param");
}
  • doInBackground()方法在工作线程上自动执行

  • onPreExecute(),onPostExecute()和onProgressUpdate()都在UI线程上调用

  • doInBackground()返回的值被发送到onPostExecute()

  • 您可以随时在doInBackground()中调用publishProgress()以在UI线程上执行onProgressUpdate()

  • 您可以随时取消任何线程的任务

  • 链接地址: http://www.djcxy.com/p/74495.html

    上一篇: Threaded web service call

    下一篇: downloaded png image with transparent background shows with black background