关键词:线程 / 线程池 / AsyncTask / IntentService / Handler
本次笔记主要梳理了 Android 的线程与线程池的相关知识点。从用途上来说,线程分为 主线程 和 子线程,主线程处理和界面相关的事情,子线程则往往用于处理执行耗时的操作。除了 Thread 本身之外,扮演线程角色的还有很多,比如:AsyncTask、IntentService、HandlerThread… 对于 AsyncTask 来说,它的底层用到了线程池,对于 IntentService 和 HandlerThread 来说,它们的底层则直接使用了线程。当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每一个线程,线程不可能做到绝对的并行,正确的做法是采用线程池,一个线程池会缓存一定数量的线程,通过线程池就可以避免因为频繁创建和销毁线程所带来的系统开销。Android 中的线程池来源于 java,主要通过 Executor 来派生特定类型的线程池,不同种类的线程池具有各自的特性。
线程池的好处:
重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销;能有效的控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象;能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能;线程池的分类:
FixedThreadPool 它是一种进程数量固定的线程池,当线程处于空闲的时候,它们并不会被回收,除非线程池被关闭了;CacheThreadPool 它是一种线程数量不定的线程池,它只有非核心线程,并且其最大的线程数为 Integer.MAX_VALUE;ScheduledThreadPool 它的核心线程数量是固定的,而非核心线程的数量没有限制,并且当非核心线程闲置的时候会被立即回收;SingleThreadExecutor 此类线程池中只有一个核心线程,它确保所有的任务都在同一个线程中按顺序执行;End.
Note by HF. Learn from 《Android 开发艺术探索》
新闻热点
疑难解答