Android AsyncTask异步基础介绍,多实例下并行分析

目录

前言

一、AsyncTask基础

二、使用步骤

三、注意事项

1、 关于 生命周期

2、 关于 内存泄漏

3、 线程任务执行结果 丢失

四、案例:AsyncTask下载文件

五、多实例并行



Async                                                   |     Task

async [æˈsɪŋk] abbr. 异步,非同步          |     英  [tɑːsk]  美  [tæsk]n. (困难的)任务,工作;

 AsyncTask,称为异步任务,属于原生类。它对Thread和Handler进行了封装,方便在子线程中执行耗时任务,然后将结果发送给主线程进行UI更新等操作。使用AsyncTask就可以不用关注Thread和Handler,因为AsyncTask内部会对其进行管理,我们就只需要关注我们的业务逻辑即可。

建议先看一遍——Android Handler机制使用,源码分析

一、AsyncTask基础

源码类如下:

//抽象类
public abstract class AsyncTask<Params, Progress, Result> {
    //线程池类型
    public static final Executor SERIAL_EXECUTOR = null;
    public static final Executor THREAD_POOL_EXECUTOR = null;

    public AsyncTask() {}

    protected abstract Result doInBackground(Params... var1);

    protected void onPreExecute() {}

    protected void onPostExecute(Result result) {}

    protected void onProgressUpdate(Progress... values) {}
    
    protected final void publishProgress(Progress... values) {    }

    public final boolean isCancelled() {}

    public final boolean cancel(boolean mayInterruptIfRunning) {}

    protected void onCancelled() {    }

    ...//省略
}

AsyncTask类中参数为3种泛型类型,控制AsyncTask子类执行线程任务时各个阶段的返回类型。如下所示:

  • Params   :开始异步任务执行时传入的参数类型,对应excute()中传递的参数
  • Progress:异步任务执行过程中,返回下载进度值的类型
  • Result     :异步任务执行完成后,返回的结果类型,与doInBackground()的返回值类型保持一致

其中,Params用于AsyncTask调用execute()方法时传入后,依次执行下面其他方法。

二、使用步骤

第一步:

创建AsyncTask子类,继承AsyncTask类,为3个泛型参数指定类型;

若不使用,可用java.lang.Void类型代替

  private class MyTask extends AsyncTask<Params, Progress, Result> {
    //线程池对象
    public static final Executor SERIAL_EXECUTOR = null;
    public static final Executor THREAD_POOL_EXECUTOR = null;
      //执行线程任务前的操作
      @Override
      protected void onPreExecute() {}

      //接收输入参数、执行任务中的耗时操作、返回 线程任务执行的结果
      @Override
      protected String doInBackground(String... params) {

            ...// 自定义的线程任务
            // 可调用publishProgress()显示进度, 之后将执行onProgressUpdate()
             publishProgress(count);
         }
      // 在主线程 显示线程任务执行的进度
      @Override
      protected void onProgressUpdate(Integer... progresses) {}

      // 接收线程任务执行结果、将执行结果显示到UI组件
      @Override
      protected void onPostExecute(String result) { }

      // 将异步任务设置为:取消状态
      @Override
      protected void onCancelled() {}
  }

第二步:

创建AsyncTask子类的实例对象,AsyncTask子类的实例必须在UI线程中创建

 MyTask mTask = new MyTask();

第三步:

手动调用execute(Param

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

艾阳Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值