关于Android开发中线程和线程池的知识记录
程序员文章站
2022-05-27 08:17:34
android 中除了 thread 之外能扮演线程的角色有很多如:asynctask 和 intentservice, handlerthread
asynctask 底层用到了线程池,而 int...
android 中除了 thread 之外能扮演线程的角色有很多如:asynctask 和 intentservice, handlerthread
asynctask 底层用到了线程池,而 intentservice 和 handlerthread 底层则直接调用了线程。
asynctask 封装了线程池和 handler,其主要是为了开发者在子线程中更新 ui ;
handlerthread是一种具有消息循环的线程,在它的内部可以使用 handler;
intentservice 是一个服务,对其进行封装,使其可以更方便的执行后台任务 intentservice 内部使用了 handlerthread 来执行任务,当任务执行完成之后 intentservice 会自动退出。
从任务执行的角度来看, intentservice 更像是一种后台线程,但是 intentservice 又是一种服务,它不容易被系统杀死,所以可以保证任务能够一直执行。而如果只是后台进程,那么这个进程的优先级就会非常低,很容易被后台杀死。
在操作系统中,线程是操作系统调度的最小的单元,同时线程又是一种受限制的系统资源,即线程是不可能无限制的产生,并且线程的创建和销毁都会有相应的开销,所以在 android 中为了避免线程的无限创建,因此有了线程池的概念,主要是通过 executor 来派生特定类型的线程池,不同种类的线程池又具有各自的特性。
android aysnctask 从角度简单理解它的使用限制原因