ANR-实例分析-死锁
死锁是一种线程同步问题,指两个或多个线程在执行过程中由于相互等待对方释放资源,导致它们永远无法继续执行下去的现象。 一般死锁满足下面四个条件: 互斥条件:一个资源每次只能被一个线程占用。 持有并等待条件:一个线程已经持有至少一个资源,同时又请求新的资源,但该资源已被其他线程占用。 不可剥夺条件:线程已获得的资源在未使用完成之前,不能被其他线程强行剥夺。 循环等待条件:存在一个线程等待链,链中每个线程都在等待下一个线程所持有的资源。 实例由于涉及公司的代码包名,我进行了替换,其他都是真实信息: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960----- pid 2298 at 2024-08-28 21:09:32.901621896+0800 -----Cmd line: com.android.launcherBuild fingerprint:...
ANR-实例分析-Binder
根据惯例,先看trace 1234567891011121314151617181920212223242526272829303132333435363738394041424344----- pid 2378 at 2024-07-02 10:14:12.7494796958+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxx/release-keys'ABI: 'arm64'Build type: optimizedsuspend all histogram: Sum: 5.532ms 99% C.I. 2us-2958.079us Avg: 83.818us Max: 4255usDALVIK THREADS (52):"main" prio=5 tid=1 Native | group="main" sCount=1 ucsCount=0 flags=1 obj=0x77bd5fb8...
ANR-实例分析-启动应用被杀
上一个ANR实例分析中有个关键信息:Looper: Slow dispatch took 10578ms main,可以看到主线程消息耗时比较多,导致ANR,这里有个问题需要再说一下,就是这个慢是系统导致的还是应用导致的,需要对log进行分析,需要看对应进程是哪些,有没有一直有个相同的进程在执行,如果没有,该关键信息的log又很多说明是系统慢了,需要系统分析,否则需要找到对应的应用进行分析。 这节继续分析ANR实例,应用被杀导致发生ANR。 trace1234567891011121314151617181920212223242526----- pid 2345 at 2024-10-23 08:45:43.412217011+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxxP:user/release-keys'ABI: 'arm64'Build type: optimizedDebug Store: 1,0,147313907::suspend all...
ANR-实例分析-Input dispatching timed out
上一篇中也介绍了Input dispatching timed out的ANR,不过和这篇不同,这篇介绍另外一种情况。 其实Input dispatching timed out有两种类型, Input dispatching timed out (Application does not have a focused window) Input dispatching timed out((server) is not responding. Waited 5002ms for FocusEvent(hasFocus=false)) 一个是没有焦点窗口类型的ANR,一个是server没有相应的ANR,这两个类型是不一样的。 第一步:看trace 123456789101112131415161718192021222324----- pid 3450 at 2024-07-20 15:00:45.488171976+0800 -----Cmd line: com.android.launcherBuild fingerprint: ...ABI:...
ANR-实例分析-启动应用失败
前面四章介绍了ANR分类,分析流程,trace信息分析,Event log分析,Logcat分析,这些都是ANR分析的基础知识,以及分析问题的关键信息,熟练掌握以上信息才能让ANR分析尽可能又快又准确。 这章开始分析一些我在开发中遇到的一些ANR实例,通过总结这些实例的分析流程以及一些关键信息,帮助我们对ANR有更多的了解。 这里我们再重复贴一次分析流程: 首先看trace信息: 12345678910111213141516171819202122232425----- pid 2758 at 2024-05-30 12:15:49.504759099+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxxxxxxx:user/release-keys'ABI: 'arm64'Build type: optimizedsuspend all histogram: Sum: 1.340s 99% C.I. 2.663us-6123.885us Avg:...
ANR-分析之基础知识介绍:logcat
前面介绍了分析ANR的基础知识:trace信息和event log,这一章继续介绍ANR分析需要的基础:logcat(main_log)。 logcat包含很多信息,系统预设的一些log信息,还有应用自己添加的一些log信息,这些信息很多,分析ANR很多时候需要分析Logcat信息,比如Looper信息,AnrManager信息,WindowManager信息等等。这些信息会辅助我们分析发生的ANR是哪些原因导致的。 首先是AnrManager信息(下面是我过滤出来的信息,因此会带有行号): 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697//...
Google-Jetpack-Compose-Animation
Developer Source Animations in Compose | Jetpack Compose | Android Developers Choose an animation API | Jetpack Compose | Android Developers Quick guide to Animations in Compose | Jetpack Compose | Android Developers Animation modifiers and composables | Jetpack Compose | Android Developers Value-based animations | Jetpack Compose | Android Developers Animated vector images in Compose | Jetpack Compose | Android Developers Advanced animation example: Gestures | Jetpack Compose ...
ANR-分析之基础知识介绍:event log
上一章介绍了ANR分析基础知识trace信息,trace信息是ANR分析的必要信息之一,里面包含了ANR发生事件,ANR发生时堆栈信息,线程状态等。 本章介绍一下另外一个必要信息:Event log。 下面信息基于Android 14的代码。 Event log分类 am相关信息 app相关信息 dispatcher相关信息 server相关信息 systemui相关信息 vm相关信息 Event log抓取1adb logcat -b events > event.log 如果想要获取更详细的信息可以加对应参数 12// 查看前台Activityadb logcat -b events -s am_on_resume_called Event...
ANR-分析之基础知识介绍:trace信息
上一章ANR-分类以及分析流程介绍了ANR分类,ANR成因分类,以及ANR分析流程。这一章介绍一下分析ANR需要的基础知识。 分析ANR问题需要一些信息 trace信息 通过抓取bugreport获取,通常位于bugreport/FS/ANR/目录下。 event...
ANR-分类以及分析流程
本篇开始整理一些关于ANR的知识,包括:分类,分析流程,基础知识,实例,以及原理等。 由于本人技术水平有限,而ANR的问题涉及整个系统的影响,因此很多复杂的ANR,或者系统ANR本人无法解决。 另外,由于本人对于系统层知识了解比较浅显,因此很多ANR问题也只能分类或者很多找到的原因不太准确,还是需要读者自己去深入学习。 ANR分类 Service Timeout:前台服务在20s内未执行完成,后台为200s; BroadcastQueue Timeout:前台广播在10s内未执行完成,后台为60s; ContentProvider Timeout:内容提供者在publish超时10s; InputDispatching Timeout:输入事件分发超时5s,包括按键和触摸事件; 后台的anr,即isSilentANR值为true,那么不显示ANR对话框,直接kill掉ANR所在进程; 如果内部框架有问题比如窗口管理器存在死锁也不会显示ANR对话框,但最后会触发安卓 WatchDog...