简谈AsyncTask

简谈AsyncTask

1.AsyncTask是什么

AsyncTask:是Android提供的轻量级的异步类,可以忽略Looper,MessageQueue,Handler等复杂对象,更便捷的完成异步耗时操作

2.AsyncTask怎么用

共分为两步,自定义AsyncTask,在耗时的地方调用自定义的AsyncTask
1.

class  DownloadTask extends AsyncTask<String,String,String>{
        @Override
        protected String doInBackground(String... strings) {
        //这里写耗时操作
            return null;
        }

2.

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //输出异常处理结果
    }

3.需要实现的几个方法分别是什么,有什么用

onPreExcute():在主线程中执行,在异步任务之前调用,系统最先调用此方法.可对控件进行初始化等操作

doInBackground():此方法运行在子线程中,比较耗时的操作放在此方法中执行

onProgressUpdate():此方法运行在主线程中,可以修改控件状态,获取任务的最新进度,触发此方法,需要在doInBackground中使用publishProgress方法

publishProgress:在doInBackground()中使用,用于触发onProgressUpdate()方法

onPostExcute():在异步任务执行完成后,系统会调用此方法,运行在主线程中,可以修改控件状态,用于接收异步任务的结果

4.什么是泛型参数

泛型参数就是可以接受任何形式的参数,不像int只能定义int类型的

什么是长度可变的参数列表

长度可变就是可以接收传过来多个参数,而不是像String str这种普通类型只能传一个
可变参数列表例如:String… str 接受传过来的多个参数返回的是一个数组,所以调用时需要像数组一样,如下面所示:values[0]

protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            textView.setText(values[0]);
        }

案例解析——倒计时Demo

布局文件简单就不发了,创建一个TextView和Button

扫描二维码关注公众号,回复: 1697666 查看本文章

java文件
创建了DownloadTask继承 AsyncTask

class  DownloadTask extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... strings) {
            while (count>0){
                publishProgress(count+""                                                                                                   );
                count--;
                try {
                //每隔一秒刷新一次
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //在倒计时完成后显示下载完成,可不写,直接返回null
            return "下载完成";
        }

        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            textView.setText(values[0]);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            textView.setText(s);
        }
    }

count=10,模拟10秒倒计时

创建了DownloadTask文件后,在按钮button的单击事件中进行调用:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DownloadTask().execute();
            }
        });
    }

猜你喜欢

转载自blog.csdn.net/source_sc/article/details/80613188