handler和异步AsyncTask

本文介绍Android开发中Handler与AsyncTask两种异步编程方式的使用方法。通过实例演示了如何利用这两种方式实现图片下载功能,并展示了如何处理异步请求的返回结果以更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. handler的基础使用:
  2. class MyOnclickListener implements OnClickListener {  
  3.     @Override  
  4.     public void onClick(View v) {  
  5.         switch (v.getId()) {  
  6.         // 响应Handler异步方式  
  7.         case R.id.downbtn1:  
  8.             // 显示进度对话框,这里也可以使用进度条,在handleMessage方法中更新进度  
  9.             dialog = ProgressDialog.show(DownLoadImageActivity.this"",  
  10.                     "正在下载,请稍等···");  
  11.             // 新建一个子线程来发送消息  
  12.             new Thread() {  
  13.                 @Override  
  14.                 public void run() {  
  15.                     try {  
  16.                         // 让ProgressDialog显示一会儿。。。。  
  17.                         Thread.sleep(2000);  
  18.                         URL url = new URL(PATH);  
  19.                         // 建立网络连接  
  20.                         HttpURLConnection conn = (HttpURLConnection) url  
  21.                                 .openConnection();  
  22.                         InputStream inputStream = conn.getInputStream();  
  23.                         // 获取图片数据  
  24.                         bitmap = BitmapFactory.decodeStream(inputStream);  
  25.                         inputStream.close();  
  26.                         Message message = new Message();  
  27.                         message.what = 1;  
  28.                         // 发送消息到消息队列中  
  29.                         handler.sendMessage(message);  
  30.                     } catch (Exception e) {  
  31.                         Message message = new Message();  
  32.                         message.what = -1;  
  33.                         handler.sendMessage(message);  
  34.                         e.printStackTrace();  
  35.                     }  
  36.                 }  
  37.             }.start();  
  38.             break;  
  39.         // 响应AsyncTask异步方式  
  40.         case R.id.downbtn2:  
  41.             new DownImageTask().execute(PATH);  
  42.             break;  
  43.         }  
  44.     }  
  45. }  
  46.   
  47. // Handler异步方式下载图片  
  48. private Handler handler = new Handler() {  
  49.     public void handleMessage(android.os.Message msg) {  
  50.         ImageView imageView;  
  51.         switch (msg.what) {  
  52.         case 1:  
  53.             // 下载成功  
  54.             imageView = (ImageView) findViewById(R.id.image);  
  55.             dialog.dismiss();  
  56.             imageView.setImageBitmap(bitmap);  
  57.             break;  
  58.         case -1:  
  59.             // 下载失败使用默认图片  
  60.             imageView = (ImageView) findViewById(R.id.image);  
  61.             dialog.dismiss();  
  62.             imageView.setBackgroundResource(R.drawable.icon);  
  63.             break;  
  64.         }  
  65.     };  
  66. };  
  

Asynctask的基础使用:
private void healthCount() {
   new AsyncTask<Void, Void, ApiBack>() {
      @Override
      protected ApiBack doInBackground(Void... params) {
         // TODO Auto-generated method stub
         ApiBack back = null;
         try {
            back = ApiJsonParser.healthdatacount(msApp.getSessionId(),
                  2, startTime1,0);
         } catch (ApiNetException e) {
            e.printStackTrace();
         } catch (ApiSessionOutException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
         return back;
      }

      @Override
      protected void onPostExecute(ApiBack result) {
         // TODO Auto-generated method stub
         super.onPostExecute(result);
         if (result != null) {
            //处理异步请会返回的的back,这已经在主线程里面可已更新UI
         } else {
         }

      }
   }.execute();//让异步开始方法,记得调用。不然异步不会执行。
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值