一、什么是同步、异步?
同步:一旦开始,调用者必须等到方法调用返回后才进行后面的一系列操作
异步:调用者不用等待被调用的操作执行完成,而是继续处理调用者后续的操作
二、异步的目的:
- 提高CPU利用率
- 提升GUI程序的响应速度,要确认程序是I/O密集型的还是CPU密集型的
注意:异步不一定快
三、CPU密集型和I/O密集型
1.CPU密集型(CPU bound)
也叫计算密集型,指的是硬盘、内存在读写数据时要比CPU速度快的多,CPU要读写I/O时,I/O在很短的时间内完成,CPU有很多的运算还要处理
2.IO密集型(I/O bound)
IO密集型指的系统的CPU性能比硬盘、内存的性能高的多,大部分时间是CPU在等待IO
3.总结
可以把任务分为计算密集型和IO密集型。
CPU密集型:
使用场景:计算型代码、Bitmap转换、Gson转换等
特点:进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力
任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,
要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数
I/O密集型:
使用场景:文件读写、DB读写、网络请求等
特点:CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)文章来源:https://www.toymoban.com/news/detail-532687.html
计算密集型程序适合C语言多线程,I/O密集型适合脚本语言开发的多线程。文章来源地址https://www.toymoban.com/news/detail-532687.html
四、使用异步避免回调地狱
- kotlin 协程,异步代码同步写法,使用:将回调转换为协程的挂起函数,挂起函数的部分运行在回调中
- 异常处理:直接加try cache
- 取消处理:
- 使用RxJava,用一些运算符用链式调用扁平化,但是要注意
- 异常处理,可以定义一个异常映射捕捉,还有全局异常捕获
- 取消处理:持有了外部类activity的引用,ui 已销毁,可能出现空指针,
到了这里,关于基础:Android异步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!