首页 > 技术文章 > AsyncTask兼容性

ithaibo-sit 2017-01-12 16:39 原文

简介

AsyncTask是Android系统提供的异步方式,其优点在于在子线程执行任务,并将结果传递给主线程。

实现方式

AsyncTask封装了Executor和Handler。

基本使用

通过AsyncTask提供的4个方法,做业务处理

  • onPreExecute()
  • doInBackground(Params... params)
  • onProgressUpdate(Progress... values)
  • onPostExecute(Result result)

注:本文并不是主要写如何使用AsyncTask,因此不作展开介绍。

兼容性

本文主要介绍的是AsyncTask在不同的API版本中的区别。

并行还是串行

下面的表格说明了AsyncTask的在不同API版本中,并行、串行情况:

  • Android1.5 ------------execute--------串行
  • Android1.6~2.2 --------execute--------并行
  • Android3.0+ -----------execute--------串行

在Android3.0以后,如果要使用并行执行,那么需要调用executeOnExecutor方法。

线程池

在Android4.4以前,corePoolSize的值为5:

 private static final int CORE_POOL_SIZE = 5;

4.4以后改为当前CPU数量加1:

 private static final int CORE_POOL_SIZE = CPU_COUNT + 1;

线程池的调度

设: nT为当前线程池的线程数量。

  • nT >= corePoolSize  workQueue未满,新任务直接加入workQueue
  • workQueue已满  nT < maximumPoolSize 新任务等待
  • nT >= maximumPoolSize  workQueue已满,将会使用THREADPOOLEXECUTOR中的handler进行处理:

    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecutionException("Task " + r.toString() + + " rejected from " + e.toString()); }

推荐阅读