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

    然后基本就完成了!

  • 相关阅读:
    Maven setting配置镜像仓库
    MyBatis配置Mapping,JavaType和JDBCType的对应关系,#与$区别
    Git常用命令
    Js JSON.stringify()与JSON.parse()与eval()详解及使用案例
    例:判断是不是自有属性hasOwnProperty方法
    JS中原型链中的prototype与_proto_的个人理解与详细总结
    原型理解:prototype
    JS中attribute和property的区别
    面试题术语
    函数语法
  • 原文地址:https://www.cnblogs.com/android-host/p/5316373.html
Copyright © 2020-2023  润新知