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

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);

然后基本就完成了!

原文地址:https://www.cnblogs.com/android-host/p/5316373.html