Android 几种异步方式,解决主线程中遇到的卡顿

起因:

当我们的UI越来越复杂的时候,或者说某个业务需要大量的计算的时候,我们的主线程会消耗大量的资源去计算,这个时候,我们的Activity或者说fragmemt等UI页面就会出现卡顿,乃至ANR。总结一下,就是我们直接在主线程(UI线程)中,做耗时操作,就会造成卡顿,甚至ANR

解决方案:

1.优化耗时的计算,提高算法,利用缓存等数据;这种方式,一般带来的提升在App这种场景中微乎其微,只有在大规模的并发场景中才会体现出效果(服务器后台服务中),打个比方,你存一年1W块钱的定期,一年利息才200多块,当你存1000W的时候,一年利息就有20多W,这种效果才明显(手动滑稽)

2.利用异步的方式,简单来说,开启另外一个线程去做耗时操作,利用CPU的多线程模式,这样我们的主线程就不会卡顿在耗时操作中

异步的方式:

1.直接使用继承Thread类或者实现Runable接口(和主线程通信还得使用handler)

2.AsyscTask(它的原理主要是利用线程池,各个历史版本系统版本可能会有不同的缺陷)

3.利用Handler,Message,Looper(主线程默认开启了Looper)

4.RxJava 线程模式.subscribeOn(Schedulers.io()),这样可以开启一个新线程来执行里面的耗时代码

严格的地来说,Android里面,主线程和子线程之间,不能使用sleep(),wait(),notify()等Java原生的线程通信的方式,因为,主线程一旦sleep那么整个App都不能正常运行(所有的Activity,Service等都在主线程运行中呢)

上一篇:是否有python http-client可以自动对几种身份验证类型执行身份验证?


下一篇:如何去掉或者修改网页中的遮罩层,DIV等元素?