Android 多线程和线程池详解
AsyncTask 使用 AsyncTask 需要继承 AsyncTask,重写 doInBackground 方法。 onPreExecute 运行在调度线程 doInBackground 运行在线程池中 onPostExecute / onProgressUpdate / onCancelled 运行在 UI 线程中。 原理 AsyncTask 内部有两个静态线程池 一个线程池 SERIAL_EXECUTOR 表示串行线程池,内部包含一个消息队列,用来保存任务、按顺序调度任务 一个 THREAD_POOL_EXECUTOR 用来执行任务,其线程数量是根据 CPU 核数计算的 一个跑在主线程的 Handler,把执行进度和执行结果的回调发送到主线程 这两个线程池和一个 Handler 都是静态的,实际上是所有的 AsyncTask 对象公用的 特点和缺陷 4.1之前版本需要在主线程完成初始化,现在的版本不需要初始化了 5.0以及之前 AsyncTask 对象必须在主线程创建,execute 方法必须在主线程调用,之后的版本无此限制,但是 onPreExecute 方法会在调度线程执行 一个 AsyncTask 只能执行一次,否则会报错 1.6之前是串行任务,1.6开始采用线程池处理任务,3.0开始又串行任务,但可以使用 executeOnExecutor 并行 一般会把