AsyncTask的使用

这个类一共包含3个参数,4个方法。

如何去理解

看文档可以看到我们要新建一个类继承于AsyncTask这个类

  1. public void onClick(View v) {  
  2.     new DownloadImageTask().execute("http://example.com/image.png");  
  3. }  
  4.   
  5. private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {  
  6.     /** The system calls this to perform work in a worker thread and 
  7.       * delivers it the parameters given to AsyncTask.execute() */  
  8.     protected Bitmap doInBackground(String... urls) {  
  9.         return loadImageFromNetwork(urls[0]);  
  10.     }  
  11.       
  12.     /** The system calls this to perform work in the UI thread and delivers 
  13.       * the result from doInBackground() */  
  14.     protected void onPostExecute(Bitmap result) {  
  15.         mImageView.setImageBitmap(result);  
  16.     }  
  17. }  
上面就是一个简单的例子。注意点如下,3个参数是值,AsyncTask<String,Void,Bitmap> 实际上这3个只是泛型,你可以这么理解,表示传递的数据类型,却不具体的表示传递的数据,以及传递的数据的多少

其次这里面的方法的有哪些以及调用顺序,以及所在的线程

  1. class GetImage extends AsyncTask<Object, Object, Object>  
  2.    {  
  3.   
  4.     @Override  
  5.     protected void onPreExecute() {  
  6.         //执行耗时操作前的准备,属于UI主线程  
  7.         super.onPreExecute();  
  8.     }  
  9.   
  10.       
  11.     @Override  
  12.     protected Object doInBackground(Object... params) {  
  13.           
  14.         /** 
  15.          *  
  16.          * 执行耗时操作,属于非UI主线程 这里面的参数,对应于泛型1 
  17.             而且是可由外面传递,其中Object...是指一个不确定大小的Object数组 
  18.             在此类里面可以调用一个叫做publishProgress(Object...) 的方法(参数对应泛型2) 
  19.             该方法将会调用下面的onProgressUpdate(Object... values)方法(参数对应泛型2)              
  20.             该方法的最终调用结果返回给onPostExecute(Object result)方法。并接着执行onPostExecute(Object result) 
  21.          */  
  22.       
  23.         return null;  
  24.     }  
  25.   
  26.     @Override  
  27.     protected void onProgressUpdate(Object... values) {  
  28.         //根据publishProgress(Object...)执行本方法 ,属于UI主线程  
  29.         super.onProgressUpdate(values);  
  30.     }  
  31.     @Override  
  32.     protected void onPostExecute(Object result) {  
  33.         //处理耗时操作的结果,属于UI主线程。其中result是doInBackground的返回值  
  34.         super.onPostExecute(result);  
  35.     }  

初始化以及调用它
  1. Object[]  object=new Object[]{};  
  2.         new GetImage().execute(object,object,object);  
这样基本就完成了一个AsyncTask类的讲解了,还有不明白的可以看sdk文档,或者问我
  1. The task instance must be created on the UI thread.  
  2. execute(Params...) must be invoked on the UI thread.  
  3. Do not call onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...) manually.  
  4. The task can be executed only once (an exception will be thrown if a second execution is attempted.)  
1.该task的实例化必须在主ui线程

2,execute方法也必须在ui线程执行

3.不要调用

  1. onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)  
这几个方法4.该实例只能被执行一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值