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中的线程和线程池
# 方法来
# 是一种
# 池中
# 是一个
# 法会
# 可以通过
# 就会
# 时长
# 这类
# 这个时候
# 会报
# 主要用于
# 返回值
# 都有
# 在这个
# 都在
# 才是
# 将会
# 子类
# 在此
相关文章:
Swift中switch语句区间和元组模式匹配
个人摄影网站制作流程,摄影爱好者都去什么网站?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
移民网站制作流程,怎么看加拿大移民官网?
定制建站是什么?如何实现个性化需求?
个人网站制作流程图片大全,个人网站如何注销?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何用景安虚拟主机手机版绑定域名建站?
C++中引用和指针有什么区别?(代码说明)
建站之星展会模版如何一键下载生成?
建站之星导航菜单设置与功能模块配置全攻略
如何快速生成专业多端适配建站电话?
如何快速搭建二级域名独立网站?
如何通过虚拟主机快速搭建个人网站?
电商网站制作价格怎么算,网上拍卖流程以及规则?
黑客如何利用漏洞与弱口令入侵网站服务器?
独立制作一个网站多少钱,建立网站需要花多少钱?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何通过免费商城建站系统源码自定义网站主题与功能?
中山网站制作网页,中山新生登记系统登记流程?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
音响网站制作视频教程,隆霸音响官方网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何选择建站程序?包含哪些必备功能与类型?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
建站之星上传入口如何快速找到?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何通过西部数码建站助手快速创建专业网站?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
制作网站的模板软件,网站怎么建设?
C#如何使用XPathNavigator高效查询XML
定制建站模板如何实现SEO优化与智能系统配置?18字教程
C++时间戳转换成日期时间的步骤和示例代码
广平建站公司哪家专业可靠?如何选择?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
济南专业网站制作公司,济南信息工程学校怎么样?
如何通过商城自助建站源码实现零基础高效建站?
如何基于云服务器快速搭建网站及云盘系统?
如何做网站制作流程,*游戏网站怎么搭建?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何在景安云服务器上绑定域名并配置虚拟主机?
建站之星如何实现网站加密操作?
如何快速辨别茅台真假?关键步骤解析
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
建站之星伪静态规则如何设置?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
*请认真填写需求信息,我们会在24小时内与您取得联系。