Android AsyncTask的使用及泛式参数

Android中我们可以通过Theater+Handler来实现多线程通信,当子线程的耗时任务完成后通过Handler向主线程发送message,主线程收到message后开始更新UI,而为了使代码更加统一,我们会使用AsyncTask类。

  1. 什么是AsyncTask
  2. AsyncTask怎么用
  3. 需要实现的几个方法、这些方法有什么用
  4. 泛型参数
  5. 长度可变的泛式参数
  6. 案例–倒计时Demo

什么是AsyncTask

  1. AsyncTask是Android提供的轻量级异步类。
  2. 为了降低异步通信的开发难度,提供了AsyncTask。
  3. AsyncTask直接继承与Object类,位于android.os包中。
  4. 使用AsyncTask可以忽略Looper、MessageQueue、Handler等复杂对象,更便捷地完成耗时操作。

AsyncTask的使用

  1. 新建内部类继承AsyncTask
  2. 定义AsyncTask的三种泛型参数
  3. 重写doInBackground抽象方法
  4. 重写onPreExecute方法
  5. 重写onProgressUpdate方法
  6. 重写onPostExecute方法
  7. 在需要启动的地方调用execute方法

需要实现的几个方法及作用

AsyncTask有四种重要的回调方法

  • onProgressUpdate
  • doInBackground
  • onPostExecute
  • onPreExecute
    这四个方法会在AsyncTask的不同时期进行自动调用,我们只需要实现这几个方法的内部逻辑即可。这四个方法的一些参数和返回值都是基于泛型的,而且泛型的类型还不一样,所以在AsyncTask的使用中会遇到三种泛型参数:Params, Progress 和 Result,如下图所示:
    这里写图片描述
    Params表示用于AsyncTask执行任务的参数的类型
    Progress表示在后台线程处理的过程中,可以阶段性地发布结果的数据类型
    Result表示任务全部完成后所返回的数据类型
    我们通过调用AsyncTask的execute()方法传入参数并执行任务,然后AsyncTask会依次调用以下四个方法:
  • onPreExecute
    这里写图片描述
  • doInBackground
    这里写图片描述
  • onProgressUpdate
    这里写图片描述
  • onPostExecute
    这里写图片描述
    下面截取Android中AsyncTask使用详解中的例子
    布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Button android:id="@+id/btnDownload"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="开始下载" />

    <TextView android:id="@+id/textView"
        android:layout_below="@id/btnDownload"
        android:layout_width="match_parent"
        android:l
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值