Android百晓生
输出是最好的输入
展开
-
ANR概述
ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。原创 2023-05-15 15:18:39 · 1520 阅读 · 0 评论 -
ANR基础篇 - Trace.txt文件分析
ANR解决基础,Trace文件详细分析。原创 2023-05-15 15:20:07 · 2412 阅读 · 2 评论 -
ANR基础 - Input系统
当用户触摸屏幕或者按键操作,首次触发的是硬件驱动,驱动收到事件后,将该相应事件写入到输入设备节点, 这便产生了最原生态的内核事件。接着,输入系统取出原生态的事件,经过层层封装后成为KeyEvent或者MotionEvent;最后,交付给相应的目标窗口(Window)来消费该输入事件。可见,输入系统在整个过程起到承上启下的衔接作用。Input模块的主要组成:Native层的InputReader负责从EventHub取出事件并处理,再交给InputDispatcher;原创 2023-05-16 20:50:52 · 518 阅读 · 0 评论 -
ANR基础篇 - 相关系统知识简介
大小核架构非大小核架构大中小核架构线程 CPU 运行状态分析技巧 - Runnable 篇线程 CPU 运行状态分析技巧 - Running 篇CPU 运行状态分析技巧 - Sleep 和 Uninterruptible Sleep 篇Android Systrace 基础知识 - CPU Info 解读。原创 2023-05-15 15:21:04 · 1147 阅读 · 0 评论 -
ANR原理篇 - ANR原理总览
了解ANR产生原理,有助于我们更好地解决疑难类ANR问题。原创 2023-05-16 20:52:29 · 735 阅读 · 0 评论 -
ANR原理篇 - ANR弹框是如何显示出来的
这一章比较简单,但对于新手排查系统问题,是一个很好的参考。原创 2023-05-16 21:49:10 · 841 阅读 · 0 评论 -
ANR原理篇 - service/broadcast/provider超时机制
Service Timeout:比如前台服务在20s内未执行完成;BroadcastQueue Timeout:比如前台广播在10s内未执行完成ContentProvider Timeout:内容提供者,在publish过超时10s;InputDispatching Timeout: 输入事件分发超时5s,包括按键和触摸事件。以上分类详情可见Google官方文档ANRs定义以上4个场景中,service、broadcast、provider的超时机制较为相似,可以类比为一个引爆炸弹的过程,原创 2023-05-16 20:53:12 · 527 阅读 · 0 评论 -
ANR原理篇 - Input超时机制
当input事件处理得慢就会触发ANR,那ANR内部原理是什么?为了理解input ANR原理,需要先了解整个input框架的处理流程,详细可参考ANR基础-Input系统,先来回顾一下input流程。事件分发dispatch过程中会通过一个变量记录当前执行时间,下一次事件分发过程会检测该时间,如果ANR时间区间超过timeout时长(即5s)则会执行ANR流程,弹出ANR弹框。原创 2023-05-16 20:51:52 · 522 阅读 · 0 评论 -
ANR原理篇 - ANR信息收集过程
发生ANR时,会有哪些日志,以及如何解读?logcat中记录的日志。这里主要起到的是打印的作用,打印一些ANR的信息,以及会把一些CPU状态打印出来。data/anr/目录下生成对应的ANR日志文件。这里面主要记录的是dump进程的信息。dropbox中记录的信息。包括了logcat日志中的部分以及ANR文件中的部分。ANR显示和日志生成原理讲解理解Android ANR的信息收集过程。原创 2023-05-15 15:22:25 · 856 阅读 · 0 评论 -
ANR实战案例 - 通用方法总结
本篇文章总结了笔者开发中常见通用案例,如发生ANR可对照分析,参考对应解决思路。原创 2023-05-15 15:10:14 · 835 阅读 · 0 评论 -
ANR实战案例 - 锁优化
不合理的锁添加,是应用中常见导致ANR的原因,可参考笔者文章案例排查。原创 2023-05-15 15:14:31 · 1047 阅读 · 0 评论 -
ANR实战案例 - FCM拉活启动优化
本篇文章总结呈现了笔者开发中的疑难ANR问题解决,一般做海外业务的同学才会用到Firebase库,但解决问题的思路类似。当碰到此类疑难ANR问题,trace.txt获取不到与应该相关堆栈时,可参考本篇思路进行分析。原创 2023-05-15 15:14:49 · 843 阅读 · 0 评论 -
ANR实战案例1 - Google广告导致ANR解决
Google广告作为出海应用较为常见的接入SDK,其产生的ANR解决相对较为困难,可参考笔者开发中方案。原创 2023-05-15 15:12:56 · 705 阅读 · 0 评论 -
ANR实战案例 2 - 不同线程状态ANR示例
结合笔者开发者常见ANR案例总结归类,以及相应的解决方案,可作为解决常见ANR问题的参考。原创 2023-05-15 15:06:50 · 853 阅读 · 0 评论 -
ANR实战案例3 - 应用在部分低端机ANR优化案例
相对于中高端机,低端机上出现ANR的频率更高,且更为棘手,笔者总结了长期实际开发者低端机ANR的解决案例,可参考文中解决方案。原创 2023-05-15 15:09:27 · 699 阅读 · 0 评论 -
ANR工具篇 - 监控工具
国内目前主流的ANR线上日志收集工具是Bugly,海外有Google Play和Firebase。三者各有优势,Bugly日志显示较全,但缺乏线程状态;Google Play作为海外应用市场发布的标准,但捕获的日志信息目前较为简单;Firebase可作为Google Play日志的不错,关键日志更详细。原创 2023-05-12 14:04:10 · 255 阅读 · 0 评论 -
ANR工具篇 - 分析工具
ANRWatchdog + Crashlytic实现监控+上报,捕获线上ANR日志。ANRWatchdog:接入后在控制台打印类似Crash的疑似卡顿堆栈。Matrix通过监听 SIGQUIT 信号,来达到监控 ANR 的目的。Systrace + TraceView解决较为复杂,比较难定位的ANR。原创 2023-05-11 18:07:27 · 492 阅读 · 0 评论