美文网首页
AsyncTask再整理

AsyncTask再整理

作者: CSU_IceLee | 来源:发表于2021-03-10 15:31 被阅读0次

    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再整理

          本文链接:https://www.haomeiwen.com/subject/bcpwqltx.html