AsyncTask再整理

AsyncTask是Android中用于异步处理的辅助类,十分的有用,能够让我们简单的在工作线程中进行耗时操作(比如I/O,网络请求),然后在UI线程进行更新操作等。

AsyncTask的用法就不说了,相信大家都用了几次了,主要的方法有:

onPreExecute
doInBackground
onProgressUpdate
onPostExecute
其中doInBackgroud运行在子线程中,其他均运行在主线程。

在doInbackground中去调用onProgressUpdate方法,以及完成时调用onPostExecute方法,都是使用Handler机制,在主线程进行回调操作。
所以,在new AsyncTask的时候,会初始化一个Handler,用于线程间通信。

然后执行execute(Param)的时候,会使用默认的串行调度器去进行任务调度,具体做法是维护了一个任务队列mTasks,将每一个AsyncTask封装成一个Future对象,执行时将Future对象加入到mTasks中放入线程池执行,并在执行完成后从mTasks中取出下一个Future对象进行运行。所以能够达到串行运行的效果。在Future对象在线程池运行过程中,会调用doInbackground方法,执行完成后会回调onPostExecute方法。

        public synchronized void execute(final Runnable r) {
            mTasks.offer(new Runnable() {
                public void run() {
                    try {
                        r.run();
                    } finally {
                        scheduleNext();
                    }
                }
            });
            if (mActive == null) {
                scheduleNext();
            }
        }

        protected synchronized void scheduleNext() {
            if ((mActive = mTasks.poll()) != null) {
                THREAD_POOL_EXECUTOR.execute(mActive);
            }
        }

你可能感兴趣的:(AsyncTask再整理)