《Android开发艺术探索》之Android的线程和线程池(一)
来源:互联网 发布:淘宝手机店铺怎么开通 编辑:程序博客网 时间:2024/06/01 09:31
前言
线程在Android中是一个很重要的概念,从用途上来说,线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。由于Android的特性,如果在主线程中执行耗时操作那么就会导致程序无法及时地响应,因此耗时操作必须放在子线程中去执行。除了Thread本身以外,在Android中可以扮演线程角色的还有很多,比如AsyncTask和IntentService,同时HandlerThread也是一种特殊的线程。尽管AsyncTask,IntentService以及HandlerThread的表现形式都有别于传统的线程,对于IntentService和HandlerThread来说,它们的底层则直接使用了线程。
不同形式的线程虽然都是线程,但是它们任然具有不同的特性和使用场景。AsyncTask封装了线程池和Handler,它主要是为了方便开发者在子线程中更新UI。HandlerThread是一种具有消息循环的线程,在它的内部可以使用Handler。IntentService是一个服务,系统对其进行了封装使其可以更方便地执行后台任务,IntentService内部采用HandlerThread来执行任务,当任务执行完毕后IntentService会自动退出。从任务执行的角度来看,IntentService的作用很像一个后台线程,但是IntentService是一种服务,它不容易被系统杀死从而可以尽量保证任务的执行,而如果是一个后台线程,由于这个时候进程中没有活动的四大组件,那么这个进程的优先级就会非常低,会很容易被系统杀死,这就是IntentService的优点。
在操作系统中,线程是操作系统调度的最小单元,同时又是一种受限的系统资源,即线程不可能无限制地产生,并且线程的创建和销毁都会有相应的的开销。当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个线程,因此线程不可能做到绝对的并行,除非线程数量小于等于CPU的核心数,一般来说这是不可能的。试想一下,如果在一个进程中频繁地创建和销毁线程,这显然不是高效的做法。正确的做法是采用线程池,一个线程池中会缓存一定数量的线程,通过线程池就可以避免因为频繁创建和销毁线程所带来的系统开销。Android中的线程池来源于Java,主要是通过Executor来派生特定类型的线程池,不同i种类的线程池又具有各自的特性
详细内容我会在以后的博客里不定期更新
- 《Android开发艺术探索》之Android的线程和线程池(一)
- android 艺术开发探索之线程和线程池
- 《Android开发艺术探索》--Android线程和线程池
- Android开发艺术探索__线程和线程池(十一)
- 读书笔记-Android开发艺术探索-第11章-Android的线程和线程池
- 【读书笔记】【Android 开发艺术探索】第11章Android 的线程和线程池
- Android开发艺术探索—— 第十一章Android的线程和线程池
- Android开发艺术探索读书笔记(第11章 Android的线程和线程池)
- 《android开发艺术探索笔记》Part11、Android的线程和线程池
- Android开发艺术探索<Android的线程池>
- android线程与线程池-----AsyncTask(一)《android开发艺术与探索》
- 《Android开发艺术探索》第十章Android的消息机制、十一章线程和线程池小结
- Android开发艺术探索笔记(3)- 进程和线程
- 《Android开发艺术探索第十一章读书笔记》 线程和线程池
- Android开发艺术探索学习笔记6——线程和线程池
- android线程与线程池-----线程池(二)《android开发艺术与探索》
- Android开发艺术探索 第11章 线程与线程池 读书笔记
- 《Android开发艺术探索》之学习笔记(一)Activity的生命周期和启动模式
- PI/4 dqpsk 非相干解调原理与matlab实现
- PHP SPL使用方法和他的威力
- xshell 无法连接ubuntu
- smart-rpc客户端
- freemarker标签里date数据的显示问题
- 《Android开发艺术探索》之Android的线程和线程池(一)
- R语言 关于package'***' is not available(for R version 3.4.1)
- Psping四大功能介绍:ICMP Ping/TCP Ping/延迟测试/带宽测试
- DOS查看端口占用及杀掉进程命令
- easyui tree树组件无限循环
- Java基础——优先级
- spring boot 中application.properties 介绍及配置
- React和JSX
- C语言 gets(),puts()函数