AsyncTask(异步任务)

什么是AsyncTask?

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程


当一个AsyncTask运行的过程中,4个方法的先后顺序与作用:

onPreExecute()
在excute调用后立即在ui线程中执行,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
doInBackground()
  onPreExecute()   完成后, 立即在后台线程中运行,一般执行耗时操作
onProgressUpdate(Progress…) 
  可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
onPostExecute()
后台运算完成时在ui线程中调用,相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。


要使用AsyncTask工作我们要提供三个泛型参数,并重载几个方法。

AsyncTask需要定义了三种泛型类型 Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。 

Progress 后台任务执行的百分比。

Result 后台执行任务最终返回的结果,比如String。



AsyncTask用在需要在主线程中调用、在背景线程中执行耗时任务、并且在主线程中返回结果的场合。

下面就是一个简单的ProgressDialog 与AsyncTask的实现 。

private class DownloadAsyncTask extends AsyncTask<String, Integer, String> {       
       ProgressDialog pdialog;    

       public DownloadAsyncTask (Context context){    
            //初始化数据
           pdialog = new ProgressDialog(context, 0);        
           pdialog.setButton("取消", new DialogInterface.OnClickListener() {    
            public void onClick(DialogInterface dialog, int i) {    
             dialog.cancel();    
            }    
           });    
           pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {    
            public void onCancel(DialogInterface dialog) {    
             finish();    
            }    
           });  
           pdialog.setTitle("第一次使用,正在下载数据...");  
           pdialog.setCancelable(true);    
           pdialog.setMax(100);    
           pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);    
              
       }  
         
       @Override    
       protected String doInBackground(String... params) {    
            //耗时操作

           return null;  
       }  
   
       @Override    
       protected void onCancelled() {    
           super.onCancelled();    
       }    
   
       @Override    
       protected void onPostExecute(String result) {    
        //执行完毕后 dialog消失
           pdialog.dismiss();      
       }    
   
       @Override    
       protected void onPreExecute() {  
        //执行开始显示dialog
          pdialog.show();   
       }    
   
       @Override    
       protected void onProgressUpdate(Integer... values) {      

       }    
    } 

 

对于写好的异步任务类,调用方法为:

DownloadAsyncTask task = new DownloadAsyncTask (context);    
 task.execute("");   

使用AsyncTask类,以下是几条准则:

Task的实例必须在主线程中创建; 

execute方法必须在主线程中调用;

task只能被执行一次,否则多次调用时将会出现异常;

 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值