概述
定义
- 一个
Android已封装好的轻量级异步类 - 属于抽象类,即使用时需 实现子类
1 | public abstract class AsyncTask<Params, Progress, Result> { |
作用
- 实现多线程
在工作线程中执行任务,如 耗时任务 - 异步通信、消息传递
实现工作线程 & 主线程(UI线程)之间的通信,即:将工作线程的执行结果传递给主线程,从而在主线程中执行相关的UI操作 - 进而保证线程安全
优点
- 方便实现异步通信
不需使用 “任务线程(如继承Thread类) +Handler”的复杂组合 - 节省资源
采用线程池的缓存线程 + 复用线程,避免了频繁创建 & 销毁线程所带来的系统资源开销
类&方法学习
类
AsyncTask 类属于抽象类,使用时需要实现子类
1 | public abstract class AsyncTask<Params, Progress, Result> { |
核心方法

方法执行顺序如下:

使用
AsyncTask的使用步骤有3个:
- 创建
AsyncTask子类 & 根据需求实现核心方法 - 创建
AsyncTask子类的实例对象(即 任务实例) - 手动调用
execute()从而执行异步线程任务
详细如下:
1 | /** |
实例Demo
activity_main.xml
1 |
|
MainActivity.java
1 | public class MainActivity extends AppCompatActivity { |
效果

Demo地址
https://github.com/Commandercc/DemoEX/blob/master/AsyncTaskDemo.zip
问题说明
关于生命周期
结论
AsyncTask不与任何组件绑定生命周期使用建议
在Activity或Fragment中使用AsyncTask时,最好在Activity或Fragment的onDestory()调用cancel(boolean);
内存x泄露
结论
若AsyncTask被声明为Activity的非静态内部类,当Activity需销毁时,会因AsyncTask保留对Activity的引用 而导致Activity无法被回收,最终引起内存泄露使用建议
AsyncTask应被声明为Activity的静态内部类
线程任务执行结果 丢失
结论
当Activity重新创建时(屏幕旋转 /Activity被意外销毁时后恢复),之前运行的AsyncTask(非静态的内部类)持有的之前Activity引用已无效,故复写的onPostExecute()将不生效,即无法更新UI操作使用建议
在Activity恢复时的对应方法 重启任务线程