Android9.0 framework层InputDispatching造成的的ANR原理分析

news/2024/7/5 2:52:32

1.前言


  Android系统中,在app中进行一些操作时,系统中的ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会在app进行操作app时,
检测App的响应时间,如果App在特定时间无法响应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。
以下四个情况都可以造成ANR发生:

    1.InputDispatching Timeout:在app进行操作时,在主线程中5秒内无法响应屏幕触摸事件或键盘输入事件

    2.BroadcastQueue Timeout :在app内执行前台广播(BroadcastReceiver)的onReceive()函数时在主线程中10秒没有处理完成,后台为60秒。

    3.Service Timeout :在系统Service的生命周期的函数中在特定时间内(前台服务20s,后台服务200s)在主线程中无法完成响应。

    4.ContentProvider Timeout :ContentProvider的publish在主线程中在10s内没进行完。
    (进程启动过程中,如果发生会直接杀进程以及清理相应信息,而不会弹出ANR的对话框)
接下来就来分析在主线程中InputDispatching造成阻塞输入无响应的分析

2.framework层app中InputDispatching造成的ANR原理分析的核心类

frameworks/native/services/inputflinger/InputDispatcher.cpp
frameworks/base/services/core/java/com/android/server/wm/WindowMana

http://lihuaxi.xjx100.cn/news/1274222.html

相关文章

Ubuntu 如何启动、停止或重启服务

在本文中,我们向您介绍在 Ubuntu 中启动、停止和重启服务的方法。 列出 Ubuntu 中的所有服务 在开始之前,先获取计算机上所有服务的列表,因为我们需要知道服务名称来管理服务。 service --status-all 它将显示 Ubuntu 上的完整服务列表。…

读发布!设计与部署稳定的分布式系统(第2版)笔记11_无限长的结果集

1. 无限长的结果集是导致响应缓慢的常见原因 1.1. 当违反稳态模式时,就可能产生无限长的结果集 1.2. 当调用方允许另一个系统支配调用时,就会出现一个无限长的结果集 2. 数据库突然返回500万行,而不是通常的100多行时会发生什么&#xff1…

chatgpt赋能python:Python经典游戏:从命令行到桌面

Python经典游戏:从命令行到桌面 Python是一个热门的编程语言,尤其在编写游戏方面表现出色。Python允许开发人员使用简单的语法和丰富的库编写高效率的游戏。在这篇文章中,我们将介绍Python的一些经典游戏,包括简单的命令行游戏和…

Linux——进程的概念

task_struct task_struct 是linux下管理进程的结构,称为PCB,进程控制块。linux所有的指令本质上都是一个进程。进程 task_struct 进程的数据、代码、可执行程序,有属性、有内容。 进程是系统的工作单元。系统由多个进程组成,包…

Redis的简单使用 (实现Session持久化)

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、Redis数据类型的使用 1. 字符串&#xff…

tensorflow2 tf.train.Checkpoint :变量的保存与恢复

Checkpoint 只保存模型的参数,不保存模型的计算过程,因此一般用于在具有模型源代码的时候恢复之前训练好的模型参数。如果需要导出模型(无需源代码也能运行模型),可以使用SavedModel。 tf.train.Checkpoint :变量的保…

Linux系统编程(vfork和fork)

文章目录 前言一、vfork讲解二、vfork使用三、exit和_exit1.exit和_exit对比2.在vfork中的使用 四、vfork和fork区别总结 前言 本篇文章讲解vfork和fork创建进程的区别。 一、vfork讲解 vfork 是一个在类Unix操作系统中的系统调用,它创建一个新进程,且…

Linux——进程地址空间,写时拷贝,进程独立性

Linux进程内存分布 验证地址空间排布 结论:堆区向地址增大的方向增长,栈区向地址减少的方向增长。局部变量通常保存在栈上,先定义的先入栈,地址是比较高的,后定义的则地址小。 static变量 作用域不变,生命…