zoukankan      html  css  js  c++  java
  • 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);

    然后基本就完成了!

  • 相关阅读:
    Django----抽屉项目 笔记
    Django验证码【附源码】
    C语言--循环控制结构
    javascript 流程控制及函数
    yield和yield from
    python面试题(转)
    断言assert用法
    javascript基本语法
    python经典一百道习题(转自奶酪博客)
    functools模块中的函数
  • 原文地址:https://www.cnblogs.com/android-host/p/5316373.html
Copyright © 2011-2022 走看看