美文网首页
Handler没有消息处理时阻塞还是非阻塞?为什么不会有ANR产

Handler没有消息处理时阻塞还是非阻塞?为什么不会有ANR产

作者: GoLearning轻松学 | 来源:发表于2022-02-16 11:19 被阅读0次

Handler没有消息的时候不是阻塞,而是等待状态。
如果消息队列没有消息的时候为什么不会ANR呢?我们来看看ANR的原理,ANR的原理时怎样子呢?ANR的机制时怎么样呢?

类型 前台 后台
Service 20s 200s
Broadcast 10s 60s
provider 10s
input 5s

Service前台为执行完20秒,后台200秒没有执行完ANR,还有广播前台10秒没执行完ANR,后台60秒,Provider10秒没执行完ANR,input,5秒钟没执行完ANR,也就是说我的按键事件,5秒钟没处理完就会ANR,很多时候ANR就是频繁地按键事件,点击屏幕,这个时候会导致ANR,这个ANR是消息产生的吗?
来看看Broadcast的流程。

Broadcast的流程

每次我发送一个广播,这里涉及到Binder机制,发送一个消息给Binder之后,Binder会发送一个消息给ActivityManagerService,ActivityManagerService发现这里有一个广播要发送,于是它做了两件事情,第一件事情,埋下一个定时炸弹,这个定时炸弹就是我们这个广播需要在10秒钟执行完,于是乎就在这里做了一个10秒钟的定时器,同时通过Binder的方式去执行我的广播,用Binder去发送这个广播,把这个广播执行,执行完广播之后,回到这边system_server线程里面,system_server的Binder就会收到广播执行完的这一个通知,于是乎又创建了一个Binder,通过这个Binder发送一个消息给ActivityManagerService,然后告诉它,我的广播已经执行完了,那么这个时候我就把这个定时炸弹拆掉,如果定时炸弹10秒钟已经完成了,那么这时候就会爆炸,如果定时器事件到达之前拆除的动作没有执行完,于是乎就会爆炸,这个炸弹就是ANR。

所以这个ANR的所有的消息发送,这个ANR的显示都是message,所以ANR的时候并不是message没有执行,而是这个炸弹的自我保护意识,通过这些事件,让我们感受到手机的自我保护的一个事件,所以它跟handler是搭不上的东西。

相关文章

  • Handler没有消息处理时阻塞还是非阻塞?为什么不会有ANR产

    Handler没有消息的时候不是阻塞,而是等待状态。如果消息队列没有消息的时候为什么不会ANR呢?我们来看看ANR...

  • looper无线循环为什么没有anr

    造成anr的不是主线程阻塞,而是,ui线程,不能及时处理looper的message消息。 在5秒 没有响应用户触...

  • 消息屏障

    消息屏障 只会阻塞普通消息,不会阻塞异步消息,绘制消息是异步消息,下面的插入消息屏障,就是为了优先处理绘制消息。

  • 性能优化(六):ANR问题分析

    ANR (Application Not Responding)应用程序无响应。如果应用程序在UI线程处理阻塞状态...

  • IO与NIO

    1、阻塞与非阻塞 阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时:...

  • 01 基本概念

    同步 异步 阻塞 非阻塞 同步与异步关注的是消息通信机制,阻塞与非阻塞关注的是程序在等待调用结果(消息,返回值)时...

  • I/O模型笔记

    #0 同步异步、阻塞非阻塞 同步异步是从消息通知机制角度来说的 阻塞与非阻塞是从程序(线程)等待消息通知时的状态角...

  • 信号二

    信号的几种状态 抵达:表示一个信号到达,要处理的信号。阻塞:表示当信号到达时使信号阻塞,当解除阻塞时再处理信号,阻...

  • 阻塞与非阻塞区别

    2. 阻塞与非阻塞 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态. 阻塞调用是指调用结果返回之前...

  • 浅析I/O模型

    大纲 一.什么是同步?什么是异步? 二.什么是阻塞?什么是非阻塞? 三.什么是阻塞IO?什么是非阻塞IO? 四.什...

网友评论

      本文标题:Handler没有消息处理时阻塞还是非阻塞?为什么不会有ANR产

      本文链接:https://www.haomeiwen.com/subject/oyuuhrtx.html