在主线程进行大量的读写操作时,界面就会卡住,抛出ANR异常,所以我就设想是不是在主线程是不断循环的,当读写操作时,主线程执行不到刷新界面的代码,所以界面就卡住了。我这样的理解有错误吗?
你的理解大致是对的,更准确一点的说,这个循环叫消息循环
https://blog.csdn.net/tianchi92/article/details/53452917
理解有很严重的原理性错误。“主线程是不断循环的”这句话很外行,错得离谱,说明你对计算机CPU执行程序的原理不懂。单线程中CPU是顺序执行CPU指令的,如果你程序(进程)没有创建子线程,那么只有一个主线程。同一时刻在cpu执行你的读写指令时,是无法处理其他指令的,包括事件响应、刷新界面其他操作指令等等。是CPU执行不到其他代码指令,而不是主线程,也不存在什么主线程循环的概念。
说通俗点 其实主UI就是handle massage massageq组成的 handle确实是一个死循环、在源码里你可以看到他无限循环来处理消息队列传给他的消息
但是。他不允许过多的线程出现在主UI 会造成 ANR 所以一般网络请求等一些耗时操作会写在子线程。避免ANR异常
主线程是UI线程,主线程的主要作用有两个部分
你的理解大致是没有问题的,更详细的了解阅读这个链接https://www.zhihu.com/question/34652589 gityuan的回答
主线程是不断循环的”这句话表述不对。Looper是一个死循环,等待消息到来。但如果耗时操作放在主线程中进行,则队列后到来的消息无法处理,从而导致ANR等问题发生。