基础:Android异步

一、什么是同步、异步?

同步:一旦开始,调用者必须等到方法调用返回后才进行后面的一系列操作

异步:调用者不用等待被调用的操作执行完成,而是继续处理调用者后续的操作

二、异步的目的:

  • 提高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和内存的速度)

计算密集型程序适合C语言多线程,I/O密集型适合脚本语言开发的多线程。

四、使用异步避免回调地狱

  • kotlin 协程,异步代码同步写法,使用:将回调转换为协程的挂起函数,挂起函数的部分运行在回调中
    •  异常处理:直接加try cache 
    • 取消处理:
  • 使用RxJava,用一些运算符用链式调用扁平化,但是要注意
    • 异常处理,可以定义一个异常映射捕捉,还有全局异常捕获
    • 取消处理:持有了外部类activity的引用,ui 已销毁,可能出现空指针,

猜你喜欢

转载自blog.csdn.net/weixin_42277946/article/details/131595009