AsyncTask学习笔记

本文深入解析了AsyncTask的工作原理,包括其作为静态线程池的本质、任务执行流程、任务状态变更机制以及在Android不同版本中的并行或串行执行特性。同时,文中详细列举了使用AsyncTask时应注意的问题,如内存泄漏、生命周期管理、结果丢失等问题及其解决方案。
摘要由CSDN通过智能技术生成

AsyncTask的机制原理:
1.本质是一个静态线程池,派生出来的子类的任务都提交的到静态线程池中去执行。
2.在doInBackground()方法中是在工作线程执行异步任务调用而方法。
3.任务状态改变,是由任务线程发送给UI线程消息,AsyncTask中有个InteralIntent来接收消息回调给先关方法,例如:onPreExcute9()/onProgressUpdate()/onResultExcute()。

注意事项:
1.内存泄漏,与hundler原因差不多,asyncTask非静态内部类持有外部类(Activity)的匿名引用,导致Activity无法回收,解决方法(a)声明也静态内部类;(b)构造函数持有activiy的弱引用;(c)在activity中的onDestroy方法中调用asyncTsak.cancel()取消异步任务。
2.生命周期,asyncTsak不会onDestroy()中自动销毁,所以需要手动调用syncTsak.cancel()销毁异步任务。
3.结果丢失,asyncTsak执行后,所在的activity被回收或屏幕旋转,导致生成新的activity,但是asyncTsak还再持有旧的activity的引用(无效的引用),其状态无法通知到新的activity中,故而结果丢失。
4.并行或串行,android1.6之前asyncTsak都是串行,有序执行;1.6-2.3为并行(并发);2.3以后又改为串行,也可以并行通多excuteOnExcutor()方法,会使整个线程池不稳定,官方不建议这样做。AsyncTask做不了高并发、太耗时的操作,太耗时的操作应使用后台service。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值