美文网首页
AsyncTask 源码解析

AsyncTask 源码解析

作者: zEcongChai | 来源:发表于2017-12-25 16:04 被阅读0次

android 1.6之前的版本版本AsyncTask都是串行,也就是它会把所有的任务都一串一串的放在线程池中,有序的进行执行,而在1.6和2.3版本的时候,它改成了并行,但是在2.3版本以后为了维护系统的稳定,google又把它改成了串行,但是它还是可以执行并行,执行并行的时候可以调用executeOnExecutor()这个方法就可以并行,一般建议只使用串行,这样能保证整个线程池的稳定,因为如果并发的话,整个线程池内部其实是不稳定的,虽然它效率很高,但是AsyncTask一般做不了高并发,太耗时的操作。

AsncTask框架的整体结构。

AsynTask的五个方法
onPreExecute() //后台执行开始前调用
doInBackground() //执行耗时代码
pushlishProgress() //在doInBackground中调用,为触发onProgressUpdate
onProgressUpdate()
onPostExecute() //后台执行完成时调用
OnDestroy()生命周期方法里面进行syncTask的cancel()方法调用。

AsyncTask的机制原理
1.AsyncTask的本质是一个静态的线程池,AsyncTask派生出的子类可以实现不同的异步任务,这些任务都是提交到静态的线程池中执行。
2.线程池中的工作线程执行doInBackground(mParams)方法执行异步任务
3.当任务状态改变之后,工作线程会向UI线程发送消息,AsyncTask内部的InternalHandler相应这些消息,并调用相关的回调函数。

注意:
在屏幕旋转,或activity由于后台系统杀掉,就是内存不够的情况下被杀掉,会导致activity被重新创建,之前运行的AsyncTask会持有当前Activity的引用,但是这个引用已经无效了,所以说这时调用AsyncTask的onPostExecute()去更新界面,就是不会在生效,这就是asyncTask结果丢失的原因。
解决方法:
OnDestroy()生命周期方法里面进行syncTask的cancel()方法调用。

当Activity被销毁时,其实AsyncTask还在后台执行,所以又与handler一样存在内存泄漏问题,解决方法同handler类似

参考:http://blog.csdn.net/lmj623565791/article/details/38614699

相关文章

  • Android AsyncTask 源码解析

    标签:Android AsyncTask 源码解析 1.关于AsyncTask 1.1 什么是AsyncTask?...

  • 4.AsyncTask使用,原理

    资料 AsyncTask处理机制详解及源码分析-工匠若水 AsyncTask 源码解析-鸿洋 带你认识不一样的As...

  • Android日记之AsyncTask源码解析

    前言 AsyncTask的使用方法请看Android日记之AsyncTask的基本使用,此篇的源码解析我们还是从使...

  • AsyncTask原理解析

    AsyncTask是一个串行的线程,本文主要通过源码解析它的原理 -->从 AsyncTask执行的方法execu...

  • AsyncTask 源码解析

    一、前言AsyncTask是一个异步任务。里面封装了线程池及Handler。所以,它可以方便地实现线程的切换及耗时...

  • AsyncTask源码解析

    参考资料:Android开发艺术探索 AsyncTask是一个Android官方提供的一种轻量级的异步任务类,它可...

  • AsyncTask源码解析

    AsyncTask 执行轻量级的异步任务,将结果传递给主线程,主线程根据结果更新UI. 使用 AsyncTask创...

  • AsyncTask源码解析

    AsyncTask源码解析 最近再刷一些基础的东西,所以就随便记录了一些看源码的心得,目前开发中见到了很多Asyn...

  • AsyncTask源码解析

    参考资料 鸿洋版AsyncTask郭霖版AsyncTask线程池Android开发艺术探索Android源码 相关...

  • AsyncTask源码解析

    变量 1. CPU_COUNT CPU总数 2. CORE_POOL_SIZE 核心线程数 3.MAXIMUM...

网友评论

      本文标题:AsyncTask 源码解析

      本文链接:https://www.haomeiwen.com/subject/xrvlgxtx.html