Android AsyncTask 异步类
Android AsyncTask 异步类

Android AsyncTask 异步类

Published
Oct 29, 2018 06:17 AM
AsyncTask直接继承Object类,位于android.os.AsyncTask。
一个AsyncTask实现类接收三个泛型参数:Params,Progress和Result,需要四步完成:onPreExecute()doInBackground()onProgressUpdate()onPostExecute()

基本用法

通过继承AsyncTask类实现自己的异步任务。

泛型参数

AsyncTask接收三个泛型参数分别为:
  1. Params
可用于在后台任务中使用。
  1. Progress
后台任务执行的进度。
  1. Result
任务执行的结果。
如:class DownLoadTask extends AsyncTask<Integer, Void, String> {

四个方法

onPreExecute()
该方法会在后台任务开始之前被调用,通常在这里可以完成一些界面初始化工作。
doInBackground()(不允许UI操作)
onPreExecute()执行完之后就会调用该方法,此时进入到后台任务(子线程中,因此不能更新UI操作)。若AsyncTask类中的第三个参数不是Void类的话,则该方法需要返回第三个泛型参数类型值。若想显示任务进度的话可以在该方法中调用publishProgress()方法将进度传递给onProgressUpdate()
onProgressUpdate()
当在doInBackground()中调用publishProgress()方法后,该方法就会在UI线程中被调用,可以用于更新UI。该方法可以在后台任务执行的同时更新UI。
onPostExecute()
doInBackground()执行完成后,且第三个泛型参数不是Void时,就会在UI线程中调用该方法。后台任务执行结果将以参数的形式传递进来,因此可以在这里执行任务完成后的操作。

终止任务

在后台任务执行时可以通过调用cancel()方法来终止该任务。调用该方法之后,在doInBackground()执行后将调用onCancelled(),而不再会调用onPostExecute()

线程规则

为了让该类能合理的执行,以下规则需要注意一下:
  1. AsyncTask 类必须在UI线程中加载,这个该步骤作为JELLY_BEAN自动完成。
  1. 实例必须在UI线程中创建。
  1. 必须在UI线程中调用execute()
  1. 不要手动调用onPreExecute()doInBackground()onProgressUpdate()onPostExecute()
  1. 任务只能被执行一次,若执行第二次的话将会抛出异常。

Loading Comments...