| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 安卓什么时候会触发ANR? -> 正文阅读 |
|
[移动开发]安卓什么时候会触发ANR? |
? ? ? 序言? ? ? ??前几天有人问我,什么时候会触发ANR?随口回答,主线程卡顿并且有输入操作未被响应的时候,会触发ANR,这应该也是网上标准的答案了。但是仔细想一想,好像debug调试的时候没有点击也会出现应用没有响应的问题。好吧,那我们就带着这个问题,去一步一步的看一下,安卓什么时候会触发ANR。 一.程序无响应Dialog的入口排查这个问题,我们首先要找到排查问题的入口。造一个程序无响应的场景,然后打开uiautomatorviewer工具查看布局。首先我们看到的是下面这样一个场景,先基于android-29的源码全局文字:没有响应,关闭应用,等待,没有搜到,正常,这些文字应该是配置在xml中的。换个思路搜id,关闭应用对应的是aerr_close,全局搜果然搜到了,在AppNotRespondingDialog类中。对应的类名正好也符合:APP无响应。所以说我们的入口找到了。 另外我们看一下AppNotRespondingDialog的包名:com.android.server.am,说明是跑在Serve端的。 ? ? 二.查找AppNotRespondingDialog引用发现有是AppErrors的handleShowAnrUi方法调用的。我们先看整个调用流程: 1.InputManagerService的notifyANR方法
好吧,调用触发点是naive。
3.ActivityManagerService.LocalService的inputDispatchingTimedOut方法 4.ActivityManagerService的inputDispatchingTimedOut方法 5.ProcessRecord的appNotResponding方法
6.ProcessRecord的appNotResponding方法
7.ProcessRecord的appNotResponding方法
三.native来源对native层研究并不深,所以这一块主要还是借鉴别人的文章: ??????android input anr分析 - 知乎 总结一下: 就是如果卡在事件分发的流程上,有多个事件都未得到处理,累计超过5S则会触发ANR。? 如果时间分发结束,通过handler分发任务出来再处理的,则需要单次耗时超5S则会触发ANR。 回头想一下我们调试时触发ANR的场景,其实应该也是前面有输入事件,虽然输入得到了响应,但是实际上并没有处理完成,导致事件处理完成的消息没有发回给Serve,从而触发的ANR。 ? |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:52:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |