美文网首页
9 异步1-AsyncTask

9 异步1-AsyncTask

作者: 一枝妖孽 | 来源:发表于2018-06-05 21:29 被阅读0次

1、什么是AsyncTask
本质上就是一个封装了线程池和Handler的异步框架,主要用来执行异步任务,其封装了异步任务,可以方便异步任务和UI线程之间的贴换

2、AsyncTask的使用方法

1)三个参数 【执行的参数,进度,返回的数据】
2)4个方法
onPreExecute():异步线程执行前,在UI线程执行
doInBackground():在异步线程中执行
onRrogressUpdate():更新进度
onPostExecute():在UI线程中执行,接受返回结果

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

4、AsyncTask的注意事项
1)内存泄露:
原因,非静态内部类持有外部类引用,而AsyncTask还持有外部引用,导致Activity无法被正常回收,造成内存泄露
解决办法:
a AsyncTask内部持有外部activity的弱引用
b 把AsyncTask改为静态内部类
c 在Activity onDestory中执行AsyncTask.cancel
2)生命周期:
如果不主动调用cancel()方法,AsyncTask不会随着Activity的销毁而销毁
3)结果丢失:
丢失原因:屏幕旋转,或者由于内存不足Activity被杀掉,而AsyncTask持有之前Activity的引用,无法更新UI,导致结果丢失
4)并行or串行
并行:1.6-2.3的时候是并行
串行:有序执行
一般建议串行

相关文章

  • 9 异步1-AsyncTask

    1、什么是AsyncTask本质上就是一个封装了线程池和Handler的异步框架,主要用来执行异步任务,其封装了异...

  • dart语法9-异步

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • 9-异步行为

    Time: 20200129 既然要讲到异步Action,那就需要明确一个概念,什么是同步Action. 同步Ac...

  • Flutter -- 9.异步编程

    一.使用Future异步编程 Dart中使用Future完成异步操作 1.基本的异步代码示例 任务代码块,执行的异...

  • ES9 ES10 更新点梳理

    接着上文我们再来看看 ES8、9 的新特性,小白慢慢成长中... ES9 异步迭代器 for await...of...

  • swift Concurrent 异步编程

    Swift 5.5 新特性[https://www.jianshu.com/p/13ba9b4984ed] 异步串...

  • 12月新书,送出一本你爱的

    每月小编都会盘点本月的异步新书,送出一本你最爱的异步图书。12月上市新书本次带来9本,涉及到的领域分别是Linux...

  • 2020-04-09(4:车载行车记录)

    1、 2、 3、 4、 5、 6、 7、√ 8、LDRB,STR 9、异步 10、 11、串口,以太网 12、终结...

  • 9.数据的异步ajax

    前言 这节我们将实现数据的异步获取,主要用到了: redux-async-connect:数据异步取,并将状态放入...

  • 9,Promise同步写法,异步实现

    为什么Promise的写法是同步的,但实现了异步操作,即实现了任务的不连续Generator函数,交出了执行权。G...

网友评论

      本文标题:9 异步1-AsyncTask

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