AsyncTask的基本使用和各个参数的说明

时间:2021-12-06 06:39:01

AsyncTask 的执行分为四个步骤,每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用。

* onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框。 
    * doInBackground(Params...) 此方法在后台线程 执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度。 
    * onProgressUpdate(Progress...) 此方法在主线程 执行,用于显示任务执行的进度。 
    * onPostExecute(Result) 此方法在主线程 执行,任务执行的结果作为此方法的参数返回。

    1. AsyncTask的三个泛型参数说明(三个参数可以是任何类型)
      class BitmapWorkTask extends AsyncTask<Integer,Integer,Bitmap>{...}
    2. 第一个参数:传入doInBackground()方法的参数类型
    3. 第二个参数:传入onProgressUpdate()方法的参数类型
    4. 第三个参数:传入onPostExecute()方法的参数类型,也是doInBackground()方法返回的类型
        @Override
protected Bitmap doInBackground(Integer... integers) {
data = integers[0];
return decodeSampleBitmapFromResources(getResources(),data,100,100);
} @Override
protected void onPostExecute(Bitmap bitmap) {
if (weakReference != null && bitmap != null) {
final ImageView imageView = (ImageView) weakReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
} @Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}

为了正确的使用AsyncTask类,以下是几条必须遵守的准则: 
  1) Task的实例必须在UI thread中创建 
  2) execute方法必须在UI thread中调用 
  3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法 
  4) 该task只能被执行一次,否则多次调用时将会出现异常 
      doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。

        BitmapWorkTask task = new BitmapWorkTask(imageView);
task.execute(resId);

然后基本就完成了!