Android 的线程和线程池

从用途上分,线程分为主线程和子线程;主线程主要处理和界面相关的事情,子线程则往往用于耗时操作。
主线程和子线程
主线程是指进程所拥有的线程。Android 中主线程交 UI 线程,主要作用是运行四大组件以及处理它们和用户的交互;子线程的作业则是执行耗时任务。
Android 中的线程形态
1、AsyncTask AsyncTask 是一种轻量级的异步任务类,可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新 UI, AsyncTask 是一个抽象的泛型类,提供了 Params(参数的类型)、Progress(后台任务执行进度的类型) 和 Result(后台任务的返回结果的类型) 这三个泛型参数, AsyncTask 提供了4个核心方法
onPreExcute 先执行,接着是 doInBackground,最后才是 onPostExecute。 当异步任务被取消时,onCancelled() 方法会被调用,这个时候 onPostExecute 则不会被调用。
2、AsyncTask 在具体的使用过程中的一些限制条件
3、AsyncTask 的工作原理 AsyncTask 中有两个线程池(SerialExecutor 和 THREAD_POOL_EXECUTOR) 和一个 Handler(InternalHandler),线程池 SerialExecutor 用于任务的排队,线程池 THREAD_POOL_EXECUTOR 用于真正地执行任务,InternalHandler 用于将执行环境从线程池切换到主线程。
4、HandlerThread HandlerThread 继承了 Thread,是一种可以使用 Handler 的 Thread, 它的实现就是在 run 方法中通过 Looper.prepare() 来创建消息队列,并通过 Looper.loop() 来开启消息循环。
与普通的 Thread 相比,普通 Thread 主要用于在 run 方法中执行一个耗时任务,而 HandlerThread 在内部创建了消息队列,外界需要通过 Handler 的消息方式来通知 HandlerThread 执行一个具体的任务。
由于 HandlerThread 的 run 方法是一个无限循环,因此当明确不需要在使用 HandlerThread 时,可以通过它的 quit 或者 quitSafely 方法来终止线程的执行。
5、IntentService IntentService 是一种特殊的 Service,继承了 Service 并且是一个抽象类,必须创建它的子类才能使用 IntentService。IntentService可用于执行后台耗时任务,任务执行后会自动停止,并且它的优先级比单纯的线程要高很多,不容易被系统杀死。在实现上,IntentService 封装了 HandlerThread 和 Handler。
Android 中的线程池
线程池的优点
ThreadPoolExecutor ThreadPoolExecutor 是线程的真正实现。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory)
ThreadPoolExecutor 执行任务时遵循的规则
线程池的分类
系统预置4种线程池的典型使用方法:
Runnable command = new Runnable(){
@Override
public void run(){
SystemClock.sleep(2000);
}
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4);
fixedThreadPool.execute(command);
ExecutorService cachedThreadPool =Executors.newCachedThreadPool();
cachedThreadPool.execute(command);
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(4);
// 2000ms 后执行 command
scheduledThreadPool.schedule(command,2000,TimeUnit.MILLISECONDS);
// 延迟10ms,每个1000ms执行一次 command
scheduledThreadPool.scheduleAtFixedRate(command,10,1000,TimeUnit.MILLISECONDS);
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
singleThreadExecutor.execute(command);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 线程
# 线程池
# 线程池的使用
# Android自带的四种线程池使用总结
# 浅谈Android中线程池的管理
# Android开发中线程池源码解析
# 分析Android中线程和线程池
# 一文彻底了解Android中的线程和线程池
# 方法来
# 是一种
# 池中
# 是一个
# 法会
# 可以通过
# 就会
# 时长
# 这类
# 这个时候
# 会报
# 主要用于
# 返回值
# 都有
# 在这个
# 都在
# 才是
# 将会
# 子类
# 在此
相关文章:
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
如何安全更换建站之星模板并保留数据?
制作网站外包平台,自动化接单网站有哪些?
历史网站制作软件,华为如何找回被删除的网站?
如何高效配置IIS服务器搭建网站?
如何快速搭建FTP站点实现文件共享?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
网站制作报价单模板图片,小松挖机官方网站报价?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
如何用AWS免费套餐快速搭建高效网站?
建站之星图片链接生成指南:自助建站与智能设计教程
高性能网站服务器配置指南:安全稳定与高效建站核心方案
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
宁波免费建站如何选择可靠模板与平台?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
自助网站制作软件,个人如何自助建网站?
如何通过商城自助建站源码实现零基础高效建站?
智能起名网站制作软件有哪些,制作logo的软件?
建站之星如何快速解决建站难题?
如何配置IIS站点权限与局域网访问?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何选择域名并搭建高效网站?
网站app免费制作软件,能免费看各大网站视频的手机app?
香港服务器如何优化才能显著提升网站加载速度?
建站之星后台管理:高效配置与模板优化提升用户体验
建站主机核心功能解析:服务器选择与网站搭建流程指南
教程网站设计制作软件,怎么创建自己的一个网站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站之星在线客服如何快速接入解答?
,怎么在广州志愿者网站注册?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
常州企业建站如何选择最佳模板?
如何在阿里云虚拟主机上快速搭建个人网站?
个人网站制作流程图片大全,个人网站如何注销?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何设计高效校园网站?
如何快速上传建站程序避免常见错误?
视频网站制作教程,怎么样制作优酷网的小视频?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站主机选购指南:核心配置优化与品牌推荐方案
宝塔面板创建网站无法访问?如何快速排查修复?
如何彻底删除建站之星生成的Banner?
如何有效防御Web建站篡改攻击?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
黑客入侵网站服务器的常见手法有哪些?
C++如何使用std::optional?(处理可选值)
*请认真填写需求信息,我们会在24小时内与您取得联系。