Android 中的线程及 AsyncTask(线程形态之一)解析一下

本文深入讲解了Android中线程的概念及应用,特别是主线程与子线程的作用区分,重点介绍了AsyncTask这一轻量级异步任务类的工作原理、使用限制及其内部线程池和Handler的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

科普一下 线程是操作系统调度的最小单元.

线程在android中是一个很重要的概念.
主线程 也叫 UI 线程 作用: 运行四大组件以及处理他们和用户交互.
子线程 作用; 执行耗时任务. 比如 I/O 操作, 网络请求.

android 3.0 开始,网络访问必须放在子线程中.

线程形态: 1传统的Thread, 2 AsyncTask ,3 HandlerThread ,4 IntentService
2,3,4 这个三者底层实现也是线程,各有各自的优缺点.

下面解析一下

AsyncTask

一种 轻量级的异步任务类,可以在线程池中执行后台任务 . 然后把执行的进度条和最终结果传递给主线程 并在主线程中更新UI.

注意:AsyncTask 不适合特别耗时的后台任务. 可以使用线程池来解决.

4个核心方法
这里写图片描述

此外还有一个方法这里写图片描述

步骤 : onPreExecute 先执行, 接着是 doInBackground ,最后是 onPostExecute , 除了这个四个方法之外 , 当异步任务取消的时候会执行 onCancelled()方法. 这个时候 onPostExecute 不会调用了

AsyncTask 使用限制
1 ,AsyncTask的类必须在主线程中加载. (5.0源码中可见)
2.execute 方法必须在UI线程调用.
3.一个AsyncTask 对象只能执行一次. 否则报运行时异常错误
4.AsyncTask的对象必须在主线程中创建.

源码解析

这里写图片描述

这里写图片描述

这里写图片描述

在多说一点 :

AsyncTask中有两个线程池,(SerialExecutor 和 THREAD_POOL_EXECUTOR ) 和 一个Handler(InternalHandler ) ,
其中,
线程池SerialExecutor 用于任务的排队,
THREAD_POOL_EXECUTOR 用于真正的执行任务,
InternalHandler 用于将执行环境从线程池中切换到主线程.

好的今天 就分享这么多啦. 下次有时间 和大家分享一下 线程池的 故事..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值