Android的AsyncTask的简单介绍

来源:互联网 发布:mac彻底删除音乐创作 编辑:程序博客网 时间:2024/06/07 20:50

Android中的AsyncTask异步任务

异步任务最主要的操作之一就是在主线程中含有访问网络的耗时操作等,把这些耗时的操作放在异步任务中进行处理。异步任务是线程操作之一,因此掌握异步任务就是掌握用线程处理耗时操作的任务。

首先,AsyncTask的类中有三个很重要的参数

public class MyTask extends AsyncTask<params, progress, result>

三个参数的分别的含义如下:

Params:传入到异步任务中执行的操作,其一般代表的是所链接的网址或服务器的地址。

Progress:发布到UI主线程的进度刻度单位。

Result:后台完成并返回的结果。

在异步类中一般有4种操作:

1.   OnPreExeucte:任务执行时显示,构造异步任务,显示进度条。

2.   DoInBackground:在OnPreExeucte之后进行处理并返回结果,到OnPostExecute函数中。

3.   OnProgressUpdate:更新UI的进度条的操作。

4.   OnPostExecute:发布UI的操作。

利用AsyncTask任务来实现从网上下载图片并显示到ImageView中的简单操作。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

那么整个操作的第一步是在AndroidManifest中对访问网络的限制,

<uses-permissionandroid:name="android.permission.INTERNET"/>

只有注册了这个权限的操作才能访问网络。

接下来就是就是布局的操作了,在界面中选用相对布局方式,添加一个Button按钮,一个ImageView的控件,用于显示下载的图片。

那么整个过程的整体思路就是:

1.   操作者点击Button按钮。

2.   Button按钮触发事件,链接网络,下载图片。

3.   图片显示到ImageView上。

整个代码如下:(在代码中解释各个步骤的操作)

packagecom.example.android_asynctask_download2; importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStream; importorg.apache.http.HttpResponse;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.DefaultHttpClient; importandroid.app.ProgressDialog;importandroid.graphics.Bitmap;import android.graphics.BitmapFactory;importandroid.os.AsyncTask;importandroid.os.Bundle;importandroid.support.v4.app.Fragment;importandroid.support.v7.app.ActionBarActivity;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewGroup;importandroid.widget.Button;importandroid.widget.ImageView; public classMainActivity extends ActionBarActivity {
   //声明的Button变量   private Button button;
   //声明ImageView变量   private ImageView imageView;
   //声明代表网络地址的变量   private String image_path="http://www.photophoto.cn/m5/008/009/0080090038.jpg";   //增加一个进度条的指示变量   private ProgressDialog dialog;    @Override   protected voidonCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);
      //通过R类的id来控件的操作id      button=(Button)this.findViewById(R.id.button1);      imageView=(ImageView)this.findViewById(R.id.imageView1);      //初始化进度条      dialog=new ProgressDialog(this);      dialog.setTitle("提示");      dialog.setMessage("正在下载.....");      //进度条的样式      dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);      //是否失去焦点      dialog.setCancelable(false);      //为button添加事件监听器,整个程序的入口就在这里      button.setOnClickListener(newOnClickListener() {                 @Override         public voidonClick(View v) {            // TODOAuto-generated method stub            //在事件监听器中执行异步方法            //实例化异步实现方法            newmytask().execute(image_path);         }      });        }
   //异步任务类,这个类处理访问网络的操作   public class mytask extendsAsyncTask<String, Integer, Bitmap>{       @Override      protected void onPreExecute() {         // TODOAuto-generated method stub         super.onPreExecute();         //处理进度条的操作          dialog.show();      }      @Override      protected void onProgressUpdate(Integer... values) {         // TODOAuto-generated method stub         super.onProgressUpdate(values);         dialog.setProgress(values[0]);      }      @Override      protected void onPostExecute(Bitmap result) {         // TODOAuto-generated method stub         super.onPostExecute(result);         dialog.dismiss();         imageView.setImageBitmap(result);      };           @Override      protected Bitmap doInBackground(String...arg0) {         HttpClient httpClient=new DefaultHttpClient();<span style="white-space:pre"></span> HttpGet httpGet=new HttpGet(arg0[0]);<span style="white-space:pre"></span> Bitmap bitmap=null;<span style="white-space:pre"></span>                try{<span style="white-space:pre"></span> <span style="white-space:pre"></span>HttpResponse httpResponse=httpClient.execute(httpGet);<span style="white-space:pre"></span>if(httpResponse.getStatusLine().getStatusCode()==200){<span style="white-space:pre"></span>HttpEntity httpEntity=httpResponse.getEntity();<span style="white-space:pre"></span>byte[] data=EntityUtils.toByteArray(httpEntity);<span style="white-space:pre"></span>bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}catch(Exception e){<span style="white-space:pre"></span>e.printStackTrace();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>return bitmap;<span style="white-space:pre"></span>}      //异步方法执行耗时操作   } }


 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机号码不停收到验证码怎么办 手机网页滑动自动跳到最下面怎么办 网页一打开就跳至评论怎么办? 百度总出现重复的网页怎么办 苹果7一直处于系统升级页面怎么办 手机看百度文章总是跳转怎么办 美度舵手滑丝怎么办 小区房产证办不下来怎么办 美海军陆战队进驻台湾大陆怎么办? 束脚裤带子怎么办系 眼角弄伤了应该怎么办 浴盆下水盖坏了怎么办 冒险岛勋章多了怎么办 玉手镯取不下来怎么办?终极绝招! 陆金所收益低怎么办 陆金所登录密码忘记怎么办 陆金所理财逾期怎么办 死亡家属晚上来闹怎么办 开车撞到人家属闹要请护工怎么办 骑马与砍杀战团打下城市怎么办 我的脑子有问题怎么办 公司外派异地工作医保怎么办 老鼠死在墙里面怎么办 父亲再婚婚后对我不好怎么办 皮衣搽了护理油后不亮了怎么办 新买的衣服皱了怎么办 新买的裙子很皱怎么办 新买的风衣很皱怎么办 新买的裙子皱了怎么办 货拉拉准点率低怎么办 定机票名字打错了怎么办 做坏事被发现了怎么办 在阳台做被发现怎么办 有秘密被发现了怎么办 微店没有收到货怎么办 cf与主机连接不稳定怎么办 穿越火线与主机连接不稳定怎么办 word被锁定无法编辑怎么办 平衡车系统乱了怎么办 监控老是滴滴的响怎么办 磁盘已满 文件未保存怎么办