[ANR] Input ANR是怎么产生的

计算机软件开发 2024-9-6 01:24:09 59 0 来自 中国
近来在做ANR优化,发现线上非常多的ANR(一半以上)缘故原由都是
Input dispatching timed out。对于Activity或Service生命周期的ANR产生原理,我想大家应该都比力相识了,就是在AMS里埋炸弹、拆炸弹那一套机制,那Input Dispatching time outANR是怎么产生的呢?这篇文章带大家一起学习一下。
Android输入体系

Input Dispatching time outANR是有Android点击事故超时所产生的,以是要相识它产生的原理,就要从Android的输入体系开始讲起。
Android输入体系,主要包罗以下几个模块:
发送端:运行在system_server历程,主要运行在InputReaderThread和InputDispatcherThread。


  • InputReader:这个模块主要负责从硬件获取输入,转换成事故Event,传给InputDispatcher。
  • InputDispatcher:将InputReader通报过来的事故分发给相应的窗口,而且监控ANR。
吸收端:运行在应用步伐历程,运行在UI线程。


  • InputEventReceiver:在App端吸收按键,并举行分发。
  • View和Activity:吸收按键并举行处置惩罚。
底子服务:


  • InputManagerService:负责InputReader和InputDispatcher的创建。
  • WindowManagerService:管理InputManager与Window及AMS之间的通讯。
通讯机制:


  • socket:发送端和吸收端跨历程,接纳的是socket的通讯机制。
Android输入体系的原理比力复杂,这篇文章,我们偏重分析ANR发生的原理,以是我们只看InputDispatcher即可,因为关于ANR的判定是在这里发生的。
后续学姐会再出专题,具体分析整个Android输入体系的原理,感兴趣的可以点个关注❤️。
ANR原理分析

我们先来思考一个题目,假如我在Activity的dispatchTouchEvent中,手动让线程sleep一段时间。这种情况肯定会报ANR么?
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 20:28, Processed in 0.154882 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表