android学习笔记(七)AsyncTask

AsyncTask类使得UI线程的使用更加方便和容易。它可以后台运行操作并且将结果

显示在UI线程上,而不需要去操作线程或者是handlers。

一个很好的例子比如进度条显示。

下面来看下用法。

AsyncTask是抽象类,所以必须继承使用。使用时需要至少实现一个方法,通常

被实现的是onPostExecute(Result result)

下面是一个例子

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }
 

这个类的使用非常容易

new DownloadFilesTask().execute(url1, url2, url3);

AsyncTask类属于泛型,他有三个泛型类型

AsyncTask<Params, Progress, Result>

Params, 执行任务时需要的参数的类型。

Progress, 后台处理过程中,前台显示的所需处理进度的类型

Result, 后台处理的结果的类型

不是所有的类型需要指定,不需要的话,可以指定为void,如

private class MyTask extends AsyncTask<Void, Void, Void> { ... }
当AsyncTask执行时,一共会有4个步骤

onPreExecute(),由UI线程在任务开始执行后立即调用,这一步通常用来初始化任务,

例如显示一个进度条。

doInBackground(Params...),由后台线程在onPreExecute()方法执行结束后立即执行,

这一步通常用来处理花费时间的后台计算工作,运算结果需在这一步返回,在这一步也

可以使用publishProgress(Progress...)来显示处理过程的进度单元,这些情况会

onProgressUpdate(Progress...)这一步在UI线程上显示

onProgressUpdate(Progress...),该方法在publishProgress(Progress...)之后被调用,

执行时间不确定,该方法以某种形式向用户显示处理过程当后台在进行运算时。比如

可以显示一个处理进度条。

onPostExecute(Result),当后台运算结束后,被调用,处理结果作为参数传递给该方法。













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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值