Android的UI线程是不断循环的吗?

在主线程进行大量的读写操作时,界面就会卡住,抛出ANR异常,所以我就设想是不是在主线程是不断循环的,当读写操作时,主线程执行不到刷新界面的代码,所以界面就卡住了。我这样的理解有错误吗?

你的理解大致是对的,更准确一点的说,这个循环叫消息循环

https://blog.csdn.net/tianchi92/article/details/53452917

理解有很严重的原理性错误。“主线程是不断循环的”这句话很外行,错得离谱,说明你对计算机CPU执行程序的原理不懂。单线程中CPU是顺序执行CPU指令的,如果你程序(进程)没有创建子线程,那么只有一个主线程。同一时刻在cpu执行你的读写指令时,是无法处理其他指令的,包括事件响应、刷新界面其他操作指令等等。是CPU执行不到其他代码指令,而不是主线程,也不存在什么主线程循环的概念。

说通俗点 其实主UI就是handle massage massageq组成的 handle确实是一个死循环、在源码里你可以看到他无限循环来处理消息队列传给他的消息
但是。他不允许过多的线程出现在主UI 会造成 ANR 所以一般网络请求等一些耗时操作会写在子线程。避免ANR异常

主线程是UI线程,主线程的主要作用有两个部分

  • 在空闲时,主线程受操作系统的调度,渲染界面,
  • 在有消息或者到达某个动作节点时,主线程调用用户实现的对应回调函数 为什么会卡死呢,因为我们在主线程上能写的都是回调函数,当回调函数占用了太长时间,主线程就被你这个函数给阻塞了,渲染就暂停了. 实际上,Android的最新几个版本已经引入了 严苛模式,在主线程创建比较耗时的读写或网络连接会直接失败,避免界面被阻塞. 具体回到问题,主线程是不是一个循环呢,是,但是它不一定是一个简单的死循环,可能比较复杂,因为要处理的东西不少,还要配合系统的调度.

你的理解大致是没有问题的,更详细的了解阅读这个链接https://www.zhihu.com/question/34652589 gityuan的回答

主线程是不断循环的”这句话表述不对。Looper是一个死循环,等待消息到来。但如果耗时操作放在主线程中进行,则队列后到来的消息无法处理,从而导致ANR等问题发生。