安卓的异步任务AsyncTask

今天作者学习了安卓的异步任务,异步任务听起来是个好高大上的东西,其实并没有好高大上。

异步任务到底是什么东西呢?广泛地讲异步任务就是以多线程的方式完成的功能需求,相对于同步

而言,异步任务就是可以先完成第一步,开启一个线程完成第二步,而不需要等待第二步的完成就可

以去做第三步的事情。而同步任务就是要按顺序的完成任务,先完成第一步,在完成第二步,才能开始

第三步的事情。在安卓中异步任务值得就是AsyncTask这个类。这个类其实就是对Thread+Handler的封装

我们使用这个类就可以很简单地完成异步任务,像填空一样而不需要自己来设计流程。而且AsyncTask封装

了线程池,这样比直接使用Thread更有效率。

说了这么多,那下面我们就来讲讲AsyncTask的使用吧。

AsyncTask的使用很简单,首先创建AsyncTask对象,然后调用它的execute(Params)方法就可以了。下面贴上代码再一步一步分析。

new AsyncTask<String, Integer, String>(){
            protected void onPreExecute() {
                System.out.println("onPreExecute");
            };
            
            @Override
            protected String doInBackground(String... params) {
                System.out.println("doInBackground......."+params[0]);
                publishProgress(1);
                return "这是返回的结果集";
            };
            
            protected void onPostExecute(String result) {
                System.out.println("onPostExecute....."+result);
            };
            
            protected void onProgressUpdate(Integer[] values) {
                System.out.println("onProgressUpdate......"+values[0]);
            };
            
            
        }.execute("这是参数");

从上面代码中我们可以看到创建AsyncTask对象需要传入三个泛型。

AsyncTask<Params, Progress, Result>

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

第一个泛型用来限制execute(Params)和doInBackground(Params)方法传入参数的类型,在execute方法中传入的参数会在doInBackground回调方法中被使用。

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

第二个泛型用来限制onProgressUpdate(Progress)和publishProgress(Progress)方法传入参数的类型,在publishProgress方法中传入的参数会在onProgressUpdate回调方法中被使用。

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

第三个泛型是用来限制Result doInBackground的返回值和onPostExecute(Result)方法传入参数的类型,在doInBackground中返回的结果会在onPostExecute回调方法中被使用

下面就是执行结果:

08-06 12:28:33.680: I/System.out(1367): onPreExecute
08-06 12:28:33.710: I/System.out(1367): doInBackground.......这是参数
08-06 12:28:33.720: I/System.out(1367): onProgressUpdate......1
08-06 12:28:33.720: I/System.out(1367): onPostExecute.....这是返回的结果集

下面贴上AsyncTask类各个方法的作用和用法:

execute(Params... params) 启动任务, 开始任务的执行流程

void onPreExecute() 在分线程工作开始之前在UIThread中执行,一般用来显示提示视图

Result doInBackground(Params... params) 在workerThread中执行, 完成任务的主要工作,通常需要较长的时间

void onPostExecute(Result result)    在doInBackground()执行完后在UIThread中执行,一般用来更新界面

publishProgress(Progress... values) : 在分线程中, 发布当前进度

void onProgressUpdate(Progress... values) : 在主线程中更新进度

开启异步任务,当然也能取消异步任务,取消异步任务的方法如下:

调用cancle(boolean)方法取消还在执行的异步任务,调用该方法后将会回调isCancelled()方法返回true。

在调用该方法后,onCancelled(Object)代替了onPostExecute(Object)在执行完doInBackground(Object[])后回调。为了保证当前任务尽快被取消,你应该经常检查isCancelled()返回值情况....

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是原来的你吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值