Android 源码总结 AsyncTask
2017-09-15 15:21
162 查看
AsyncTask
首先从Android3.0开始,系统要求网络访问必须在子线程中进行,否则网络访问将会失败并抛出NetworkOnMainThreadException这个异常,这样做是为了避免主线程由于耗时操作所阻塞从而出现ANR现象。AsyncTask封装了线程池和Handler。AsyncTask有两个线程池:SerialExecutor和THREAD_POOL_EXECUTOR。前者是用于任务的排队,默认是串行的线程池:后者用于真正的执行任务。AsyncTask还有一个Handler,叫InternalHandler,用于将执行环境从线程池切换到主线程。AsyncTask内部就是通过InternalHandler来发送任务执行的进度以及执行结束等消息。AsyncTask排队执行过程:系统先把参数Params封装为FutureTask对象,它相当于Runnable,接着FutureTask交给SerialExcutor的execute方法,它先把FutureTask插入到任务队列tasks中,如果这个时候没有正在活动的AsyncTask任务,那么就会执行下一个AsyncTask任务,同时当一个AsyncTask任务执行完毕之后,AsyncTask会继续执行其他任务直到所有任务都被执行为止。
关于线程池,AsyncTask对应的线程池ThreadPoolExecutor都是进程范围内共享的,都是static的,所以是AsyncTask控制着进程范围内所有的子类实例。由于这个限制的存在,当使用默认线程池时,如果线程数超过线程池的最大容量,线程池就会爆掉(3.0默认串行执行,不会出现这个问题)。针对这种情况。可以尝试自定义线程池,配合AsyncTask使用。
相关文章推荐
- [学习总结]7、Android AsyncTask完全解析,带你从源码的角度彻底理解
- Android源码分析—带你认识不一样的AsyncTask
- Android AsyncTask运作原理和源码分析
- android开发-AsyncTask源码解析
- 实例源码--Android的ListView控件的总结
- Android中AsyncTask基本用法与源码分析(API 23)
- Android AsyncTask两种线程池分析和总结
- Android AsyncTask运作原理和源码分析
- android源码编译apk的一点小总结
- android 源码开发 关于编译等小知识点总结
- Android 总结:打造Android中的流式布局和热门标签(源码有详细注释)
- Android源码编译整理总结
- android 源码 sdk 编译总结
- Android编程实现画板功能的方法总结【附源码下载】
- android 事件分发机制(源码分析)—(详细)(逐步总结)(值得一看)
- android源码使用proguard混淆编译及错误总结
- android源码的编译问题总结
- Android基础 Android AsyncTask使用注意事项以及总结
- [学习总结]8、android 自定义控件 使用declare-styleable进行配置属性(源码角度)
- Android AsyncTask完全解析,带你从源码的角度彻底理解