Android基础-AsyncTask基本使用

本来写一篇AsyncTask的源码解析的,后来发现AsyncTask的使用比handler要复杂一些。记得刚入行的时候,使用异步任务我一直觉得比较复杂,所以我认为AsyncTask中的使用及参数还是有必要解释一下。那么我们先了解一下他的基本使用及参数,具体的源码我将在之后的博客在进行解析。


不说多余的废话,先上代码

        AsyncTask task = new AsyncTask() {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
                if (isCancelled()) {
                    return;
                }
            }

            @Override
            protected Void doInBackground(Void... voids) {
                publishProgress();
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
            }

            @Override
            protected void onCancelled() {
                super.onCancelled();
            }
        };
        //采用默认的线程池执行异步任务
        //task.execute();
        //采用自定义线程池执行异步任务
        task.executeOnExecutor(Executors.newSingleThreadExecutor());

先看3个三个泛型代表什么意思

  • Paramas:在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。
  • Progress:后台执行耗时任务时,返回的任务进度
  • Result:任务执行完毕后返回的结果

再看一下Asynctask中的几个方法

onPreExecute(): 这个方法是在执行异步任务之前的时候执行,并且是在UI Thread当中执行的,通常我们在这个方法里做一些UI控件的初始化的操作,例如弹出ProgressDialog

doInBackground(Params... params): 在onPreExecute()方法执行完之后,会马上执行这个方法,这个方法就是来处理异步任务的方法,Android操作系统会在后台的线程池当中开启一个worker thread来执行我们的这个方法,所以这个方法是在worker thread当中执行的,这个方法执行完之后就可以将我们的执行结果发送给我们的后一个 onPostExecute 方法,因此,doInBackground是这四个方法中唯一必须要重写的方法,在这个方法中,我们可以从网络当中获取数据等一些耗时操作

onProgressUpdate(Progess... values): 这个方法也是在UI Thread当中执行的,我们在异步任务执行的时候,

有时候需要将执行的进度返回给我们的UI界面,例如下载一张网络图片,我们需要时刻显示其下载的进度,

就可以使用这个方法来更新我们的进度。这个方法在调用之前,我们需要在 doInBackground 方法中

调用一个 publishProgress(Progress) 的方法来将我们的进度时时刻刻传递给 onProgressUpdate 方法从而来更新进度

onPostExecute(Result... result): 当我们的异步任务执行完之后,就会将结果返回给这个方法,这个方法也是在UI Thread当中调用的,我们可以将返回的结果显示在UI控件上

onCancelled:当AsyncTask调用了cancel(boolean)方法时,在doinbackground执行完成之后,程序会调用onCancelled方法,而不是回调onPostExecute方法

你可能感兴趣的:(Android)