Androidの多线程之更新ui(AsyncTask)

来源:互联网 发布:网上淘宝贷款是真的吗 编辑:程序博客网 时间:2024/06/06 02:50

AsyncTask

构造(泛型参数)

外部步骤:

AsyncTask task = new AsyncTask<params,values,result>();

task.exec(params);

内部流程:

1.void onPreExecute() ;//里头可放些提醒类的东西

2.result doInBackground(params){publishProgress(values);};//执行任务,取得结果并返回

3.void onProgressUpdate(values);//接收publishProgress()参数,可以更新进度

4.void onPostExecute(result);//执行完成,取得结果,可在UI上展示

  1 package com.bvin.aync;  2   3 import java.io.IOException;  4   5 import org.apache.http.HttpResponse;  6 import org.apache.http.client.ClientProtocolException;  7 import org.apache.http.client.HttpClient;  8 import org.apache.http.client.methods.HttpGet;  9 import org.apache.http.impl.client.DefaultHttpClient; 10  11 import android.app.Activity; 12 import android.app.ProgressDialog; 13 import android.graphics.Bitmap; 14 import android.graphics.BitmapFactory; 15 import android.os.AsyncTask; 16 import android.os.Bundle; 17 import android.os.Handler; 18 import android.os.Message; 19 import android.view.View; 20 import android.widget.Button; 21 import android.widget.ImageView; 22 import android.widget.Toast; 23  24 public class AyncActivity extends Activity { 25     /** Called when the activity is first created. */ 26     private ImageView iv; 27     private ProgressDialog dialog; 28     @Override 29     public void onCreate(Bundle savedInstanceState) { 30         super.onCreate(savedInstanceState); 31         setContentView(R.layout.main); 32         33         initViews(); 34     } 35      36     private void initViews(){ 37         Button bt = (Button)findViewById(R.id.bt); 38         iv =  (ImageView)findViewById(R.id.iv); 39          40         bt.setOnClickListener(new View.OnClickListener() { 41              42             @Override 43             public void onClick(View v) { 44                 // TODO Auto-generated method stub 45                 loadImages(); 46             } 47         }); 48          49         dialog = new ProgressDialog(this); 50          51     } 52      53     private void loadImages(){ 54          55         LoadImageTask task = new LoadImageTask(); 56         task.execute("http://avatar.csdn.net/0/3/4/1_mylzc.jpg"); 57     } 58      59     class LoadImageTask extends AsyncTask<String,Integer,Bitmap>{ 60  61         @Override 62         protected Bitmap doInBackground(String... params) { 63             // TODO Auto-generated method stub 64             Bitmap bitmap  = null; 65             HttpGet get = new HttpGet(params[0]); 66             HttpClient client = new DefaultHttpClient(); 67             try { 68                 HttpResponse res = client.execute(get); 69                 bitmap = BitmapFactory.decodeStream(res.getEntity().getContent()); 70             } catch (ClientProtocolException e) { 71                 // TODO Auto-generated catch block 72                 e.printStackTrace(); 73             } catch (IOException e) { 74                 // TODO Auto-generated catch block 75                 e.printStackTrace(); 76             } 77              78              79             return bitmap; 80         } 81  82         @Override 83         protected void onPostExecute(Bitmap result) { 84             // TODO Auto-generated method stub 85             super.onPostExecute(result); 86             dialog.dismiss(); 87             if(result!=null){ 88                 iv.setImageBitmap(result); 89                 Toast.makeText(AyncActivity.this, "图片下载成功", 1000).show(); 90                  91             }else{ 92                  93                 Toast.makeText(AyncActivity.this, "图片下载失败", 1000).show(); 94             } 95              96         } 97  98         @Override 99         protected void onPreExecute() {100             // TODO Auto-generated method stub101             super.onPreExecute();102             dialog.show();103         }104 105         @Override106         protected void onProgressUpdate(Integer... values) {107             // TODO Auto-generated method stub108             super.onProgressUpdate(values);109         }110 111         112         113         114         115     }116 }
原创粉丝点击